使用JQuery的事件调用不';不能使用ajax生成的代码

使用JQuery的事件调用不';不能使用ajax生成的代码,jquery,ajax,Jquery,Ajax,我有一个HTML select,我使用JQuery调用更改事件: $(“选择id选择”).change(myMethod) 我在myMethod中添加了一个警报,以便测试它是否正常工作 当我进入页面并更改选项时,会弹出警报。但是,如果由于某种原因(称为单选按钮)select的代码被AJAX更改,弹出窗口将不再工作(因此事件调用不工作) 我使用firebug来查看在“AJAX刷新”之后,selectid是否发生了更改,但它是相同的。在两行之间读取,您正在动态更改页面上的id=“id\u sel”元

我有一个HTML select,我使用JQuery调用更改事件:

$(“选择id选择”).change(myMethod)

我在
myMethod
中添加了一个警报,以便测试它是否正常工作

当我进入页面并更改选项时,会弹出警报。但是,如果由于某种原因(称为单选按钮)select的代码被AJAX更改,弹出窗口将不再工作(因此事件调用不工作)


我使用firebug来查看在“AJAX刷新”之后,
select
id是否发生了更改,但它是相同的。

在两行之间读取,您正在动态更改页面上的
id=“id\u sel”
元素。这意味着您在页面加载时连接的事件处理程序在替换元素时被丢弃。id没有更改并不重要,因为该id仅用于在页面加载时选择元素。实际的DOM元素不相同(即使id相同)

如果是这种情况,则需要使用委派事件处理程序:

$(document).on('change', '#id_sel', myMethod);
这是通过侦听更改事件冒泡到未更改的祖先,然后应用jQuery筛选器,然后将函数应用到导致事件的任何元素来实现的

document
是默认值,前提是您没有一个非更改的祖先更靠近更改的元素。不要使用
“body”
作为默认值,因为它与某些事件类型有关


注意:由于id是唯一的,并且在快速循环中,您不需要在id选择器前面加上
select

前缀来减慢它的速度,它就像一个符咒一样工作!!非常感谢。谢谢你的解释:)