Javascript 当有多个元素时,jquery选择器不起作用

Javascript 当有多个元素时,jquery选择器不起作用,javascript,jquery,foreach,Javascript,Jquery,Foreach,我的jquery选择器有点问题。当我只有一个列表项时,jquery代码可以正常工作。但是当我有多个时,chatid具有第一个列表项的值。为什么我总是获取第一个列表项的id 我的html和foreach循环: <ul data-role="listview" id="uItem1" data-inset="true"> <?php foreach ($result as $keyres => $rowres): ?> <li>

我的jquery选择器有点问题。当我只有一个列表项时,jquery代码可以正常工作。但是当我有多个时,
chatid
具有第一个列表项的值。为什么我总是获取第一个列表项的id

我的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>
您需要使用
$(this)

当您在php中使用foreach生成元素时,可能需要

$("#uItem1").on('click',' > li > a',function() {
正如@Rory在评论中提到的,您可以使用
这个.id

更改:

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


您需要使用
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);
        }
    });                     
}); 

使用
每个
迭代
$(“#uItem1>li>a”)
,创建一个数组并通过ajax将数组传递给服务器。这是因为
attr()
仅获取集合中第一个元素的属性,而无法获取所有元素的属性。您可能想要的只是
var chatid=this.id
您不必在process函数中再次使用相同的选择器。只需使用
var chatid=this.id以获取要删除的项目的idprocessed@RoryMcCrossan当然但我只是喜欢jquery方式,虽然他已经足够使用jqueryFair了,但是,与创建一个新的jQuery对象来检索单个属性相比,访问一个已经可访问的元素的属性更好、更快。@Rorymcrossan我当然同意你的观点,但我不知道操作性能,因此不能混淆js和jQuery。。所以我只是让他自己跟踪。。无论如何,我会更新我的答案:)
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.
$("#uItem1 > li > a").click(function() {
    var chatid = this.id;

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