Php 使用jQuery选择器指定多个对象

Php 使用jQuery选择器指定多个对象,php,jquery,ajax,jquery-selectors,Php,Jquery,Ajax,Jquery Selectors,我有一个由php生成的html组成的导航栏,如下所示: <ul> <div class="container"><button type="button" name="1" class="delButton" alt="Delete"></button></div> <a href="/" alt="Home">Home</a> <div class="container"><button ty

我有一个由php生成的html组成的导航栏,如下所示:

<ul>
<div class="container"><button type="button" name="1" class="delButton" alt="Delete"></button></div>
<a href="/" alt="Home">Home</a>
<div class="container"><button type="button" name="2" class="delButton" alt="Delete"></button></div>
<a href="/" alt="Events">Events</a>
<div class="container"><button type="button" name="3" class="delButton" alt="Delete"></button></div>
<a href="/" alt="Calendar">Calendar</a>
<div class="container"><button type="button" name="4" class="delButton" alt="Delete"></button></div>
<a href="/" alt="About Us">About Us</a>
</ul>
当我单击任何一个删除按钮并删除相应的链接时,上面的代码会按预期工作。但是,如果在删除一个链接后,我尝试单击另一个删除按钮,则什么也不会发生。confirm()警报框甚至没有出现。这表明没有为第二次删除尝试输入click()函数

我对此的解释是,一旦函数第一次执行,它就会将选择器解析为单击的特定按钮;这意味着随后单击另一个“.container”按钮对该功能没有影响


我的评估正确吗?如果是,有没有办法阻止函数将选择器解析为特定对象?如果没有,是否有其他方法允许我对现在设置的所有删除按钮使用一个函数?

再次加载
getnav.php
时,您的单击处理程序将被覆盖。您可以使用以下构造:

$(document).on('click', '.container button', function() {
    // click handler code here
}
您还应该能够缩小选择器的范围:

$('.nav ul').on('click', '.container button', function() {
    // click handler code here
}
这将绑定
本身上的点击处理程序,然后使用
.container按钮
选择器确定点击事件“发送”到哪里


另请参见:

如果该条是PHP生成的,则在循环过程中始终可以将onclick转储到输出中。比如:

onclick = "deleteLine('<?=$id?>'); void(0); return false;"

我意识到这不是一个令人惊奇的解决方案,但它应该可以完成这项工作。

在删除内容后加载内容后,您必须再次绑定事件。最好的方法是在上使用jQuery
。它将自动找到添加到DOM中与选择器匹配的新元素,并将它们绑定到事件

用这个代替

$('.nav ul').on('click', '.container button', function() {

还应注意的是,
.on()
是绑定的最佳方式(对于大多数意图和目的而言)。使用
$('.container button').live('click',function(){
似乎比.on()?@Wolfram
.live()更简单
已被弃用。此答案存在几个问题。首先,它以不干净的方式将页面结构与Javascript混合在一起。其次,函数名称模糊。第三,函数附加到任意上下文。第四,“return false;”和“void(0);”在这里是多余的。第五,此解决方案增加了响应所需的信息。第六,您的答案中的问号标记可能在某些PHP服务器上被禁用。你好,Barbarrosa。感谢您的反馈。请注意,此代码是作为“概念证明”使用的而不是推荐的生产代码。不过我会记住你说的!这并不是你提出的确切问题的答案,但在某些情况下,如果AJAX删除请求成功,可以简单地用JQuery删除链接。
function deleteLine(id) {
$('.nav ul').on('click', '.container button', function() {