jQuery不能处理通过Ajax请求发送的id吗?

jQuery不能处理通过Ajax请求发送的id吗?,jquery,ajax,Jquery,Ajax,这是真的吗 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> <script> $(document).ready(function(){ $("#reset").click(function(){alert("hi");}); }); </scrip

这是真的吗

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

<script>
    $(document).ready(function(){
        $("#reset").click(function(){alert("hi");});
    });
</script>

<ul>
    <li id="reset">Reset</li>
</ul>

上面的代码运行良好。但是,如果我通过Ajax调用获取列表,它将不起作用。为什么?不,这不是真的。您需要对动态生成的内容使用on方法:

$(document.body).on('click', '#reset' ,function(){
    alert("hi");
});

通过启用,可以通过在DOM中已经存在的父元素上注册事件来使用事件委派。动态添加的元素中的事件将冒泡到您注册的事件中,并且仅当事件的实际目标与您传入的选择器匹配时才会调用处理程序。

否,它不是真的。您需要对动态生成的内容使用on方法:

$(document.body).on('click', '#reset' ,function(){
    alert("hi");
});
通过启用,可以通过在DOM中已经存在的父元素上注册事件来使用事件委派。动态添加的元素中的事件将冒泡到您注册的事件,并且仅当事件的实际目标与您传入的选择器匹配时才会调用处理程序。

使用

动态创建元素时,无法直接处理它们,因此必须使用。在:

简要说明如下:

当您使用普通事件注册模型时,它会将处理程序直接注册到在处理程序注册执行时DOM中存在的目标。因此,稍后动态添加的元素将不会获得这些处理程序

解决方法是使用事件委派。在这个模型中,处理程序被注册到一个祖先元素,当页面加载选择器以过滤掉源元素时,这个祖先元素将出现。这利用了事件传播——一个元素中发生的事件被传播到所有的祖先元素,很少有像焦点事件这样的异常。因此,在元素中发生的事件将传播到其中一个元素中的祖先元素。将注册处理程序,然后将事件源元素event.target及其祖先与作为第二个参数传递的选择器相匹配,如果满足此条件,则执行处理程序

使用

动态创建元素时,无法直接处理它们,因此必须使用。在:

简要说明如下:

当您使用普通事件注册模型时,它会将处理程序直接注册到在处理程序注册执行时DOM中存在的目标。因此,稍后动态添加的元素将不会获得这些处理程序

解决方法是使用事件委派。在这个模型中,处理程序被注册到一个祖先元素,当页面加载选择器以过滤掉源元素时,这个祖先元素将出现。这利用了事件传播——一个元素中发生的事件被传播到所有的祖先元素,很少有像焦点事件这样的异常。因此,在元素中发生的事件将传播到其中一个元素中的祖先元素。将注册处理程序,然后将事件源元素event.target及其祖先与作为第二个参数传递的选择器相匹配,如果满足此条件,则执行处理程序

您应该使用:

第一个选择器必须是不会被替换的元素。这样,当事件冒泡到这一点时,它被捕获。然后将触发事件的实际元素指定为的第二个参数。在上,应使用:


第一个选择器必须是不会被替换的元素。这样,当事件冒泡到这一点时,它被捕获。然后,将触发事件的实际元素指定为.on的第二个参数,作为在onLoad阶段不准备的DOM,需要使用on绑定 如


由于DOM不是在onLoad阶段准备的,所以需要使用on绑定 如

活动代表团

当您使用普通事件注册模型时,它会将处理程序直接注册到在处理程序注册执行时DOM中存在的目标。因此,稍后动态添加的元素将不会获得这些处理程序

解决方法是使用事件委派。在这个模型中,处理程序被注册到一个祖先元素,当页面加载选择器以过滤掉源元素时,这个祖先元素将出现。这利用了事件传播——一个元素中发生的事件被传播到所有的祖先元素,很少有像焦点事件这样的异常。因此,元素中发生的事件将传播到其中一个元素中的祖先元素。处理程序将被注册,然后事件源元素event.target及其祖先将与作为第二个参数传递的选择器匹配,如果满足该条件,则执行处理程序

所以试试看

$(document).on('click', '#reset', function() {
    // Your code
});
活动代表团

当您使用普通事件注册模型时,它会将处理程序直接注册到存在的目标事件 在处理程序注册执行点的DOM中。因此,稍后动态添加的元素将不会获得这些处理程序

解决方法是使用事件委派。在这个模型中,处理程序被注册到一个祖先元素,当页面加载选择器以过滤掉源元素时,这个祖先元素将出现。这利用了事件传播——一个元素中发生的事件被传播到所有的祖先元素,很少有像焦点事件这样的异常。因此,元素中发生的事件将传播到其中一个元素中的祖先元素。处理程序将被注册,然后事件源元素event.target及其祖先将与作为第二个参数传递的选择器匹配,如果满足该条件,则执行处理程序

所以试试看

$(document).on('click', '#reset', function() {
    // Your code
});

你是说ajax调用返回id为reset的li吗?单击事件没有触发?代码中还有其他一些问题。它会很完美的。@andrew buchan是的,我是说你说的,你是说ajax调用返回id重置的li吗?单击事件没有触发?代码中还有其他一些问题。它会很完美的。@andrew buchan是的,我是说你说的你需要解释区别是什么。唯一能理解它的人是那些已经知道它的人提供了解释。你需要解释区别是什么。唯一能理解它的人是那些已经知道它的人,他们提供了解释。这个答案是正确的。如果你要复制和粘贴而不加署名,至少要纠正拼写错误。@Wooble是的,我复制了他的解释,但我在他之前回答了。如果他在我之后发布了答案以及他之前所做的解释,我该怎么办?这个答案正在修改中。如果你要复制粘贴而不加署名,至少要纠正错误。@Wooble是的,我复制了他的解释,但我在他之前回答了。如果他在我之后发布了答案和他之前的解释,我该怎么办?
$(document).on('click', '#reset', function() {
    // Your code
});