Javascript 当有多个元素时,jquery选择器不起作用
我的jquery选择器有点问题。当我只有一个列表项时,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>
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);
}
});
});