2014-07-08 42 views
-1

我有一个HTML选择工作,我打电话使用JQuery变化事件:使用jQuery事件调用不使用Ajax生成的代码

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

myMethod添加警报,所以我可以测试如果它工作。

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

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

回答

1

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

如果这是你需要使用委派事件处理程序,而不是如此:

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

这是通过侦听change事件冒泡到非改变的祖先,然后应用一个jQuery过滤器,然后将函数应用到任何导致事件的元素。

document是默认的,如果您没有不变的祖先更接近不断变化的元素。不要使用'body'作为默认值,因为它在某些事件类型上有问题。

注意:由于id是唯一的,并且在快速loopkup中,您不需要通过在select前加上id选择器来减慢速度。

+0

它就像一个魅力!谢谢!并感谢您的解释:) – Neoares