2015-12-27 66 views
-3

我有一個小問題,我的jQuery選擇器。當我只有一個列表項時,jquery代碼正常工作。但是當我有多個時,chatid具有第一個列表項的值。爲什麼讓我總是第一個列表項的ID?jquery選擇器不會工作時多個元素

我的HTML和foreach循環:

<ul data-role="listview" id="uItem1" data-inset="true"> 
    <?php foreach ($result as $keyres => $rowres): ?> 

     <li><a class="chat" id="<?php echo $rowres['id']; ?>" href="accept.php">chat</a></li> 

     <?php endforeach; ?> 
    </ul> 

我的jquery:

$("#uItem1 > li > a").click(function() { 
    var chatid = $("#uItem1 > li > a").attr('id'); 

    $.ajax({ url: 'read.php', 
    data: {chatid}, 
    type: 'POST', 
    success: function(output) { 
       // alert(output); 
       } 
    });      

    }); 
+0

迭代( 「#uItem1> LI>一個」)'使用'each',建立一個數組,並通過AJAX傳遞數組到服務器。 – Tushar

+0

這是因爲attr()只獲取集合中第一個元素的屬性,所以它不能獲取所有元素的屬性。你可能想要的只是'var chatid = this.id' – adeneo

+0

你不必在過程函數中再次使用相同的選擇器。使用簡單的'var chatid = this.id;'獲取正在處理的項目的ID – ikken

回答

7

你需要使用$(this)

var chatid = $(this).attr('id'); 

而當你在PHP中使用的foreach Ť Ø可能產生的元素,你需要

$("#uItem1").on('click',' > li > a',function() { 

而作爲@Rory在評論中提到的,你可以使用this.id

+0

或者只是'this.id' –

+1

@RoryMcCrossan當然..但我只是喜歡jquery的方式,而他已經使用jquery –

+1

夠公平,但它是更好的練習和更快的訪問已經可訪問的元素的屬性,而不是創建一個新的jQuery對象來檢索單個屬性。 –

4

變化:

var chatid = $("#uItem1 > li > a").attr('id'); 

要:

var chatid = this.id; 
var chatid = $(this).attr('id'); // For some reason if the previous didn't work. 
1

您需要使用this關鍵字來引用引發事件的元素。從那裏你可以得到它的id屬性。另請注意,您在$.ajax調用中發送的對象無效,它需要一個密鑰和一個值。嘗試:在`$

$("#uItem1 > li > a").click(function() { 
    var chatid = this.id; 

    $.ajax({ url: 'read.php', 
     data: { 
      'chatid': chatid 
     }, 
     type: 'POST', 
     success: function(output) { 
      // alert(output); 
     } 
    });      
});