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

时间:2014-07-08 13:44:57

标签: jquery ajax

我有一个HTML选择,我使用JQuery调用change事件:

$("select#id_sel").change(myMethod);

我在myMethod添加了提醒,因此我可以测试它是否有效。

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

我已经使用了firebug来查看" AJAX刷新"之后select ID是否已更改,但它是相同的。

1 个答案:

答案 0 :(得分:1)

在行之间进行读取,您将动态更改页面上的id="id_sel"元素。这意味着当替换元素时,您在页面加载时连接一次的事件处理程序将被丢弃。 id没有改变并不重要,因为id仅用于在页面加载时选择元素。实际的DOM元素不是同一个(即使id是相同的)。

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

$(document).on('change', '#id_sel', myMethod);

这可以通过监听更改事件冒泡到一个不变的祖先,然后应用jQuery过滤器,然后将该函数应用于任何导致事件的元素

如果您没有更改元素的不变的祖先,则

document是默认值。请勿使用'body'作为默认值,因为它在某些事件类型方面存在问题。

注意:由于ID是唯一的并且在快速循环中,因此您不需要通过在{id}选择器前加select来减慢速度。