我是jQuery的印象下on
事件处理程序,是为了能够“听”动态创建的元素,它本来是要替代的行为live
。 然而,我所经历的,使用on
没有捕获click事件,而使用live
正在取得成功!
我的情况棘手的方面是,我不仅是动态创建的内容,但我通过AJAX做它.get()
调用,并将所得HTML插入一个模式.dialog()
jQueryUI的弹出窗口。
这里是什么,我试图完成一个简化版本(包裹在$(document).ready(...)
$.get("getUserDataAjax.php", queryString, function(formToDisplay) {
$("#dialog").dialog({
autoOpen: true,
modal: true,
buttons...
}).html(formToDisplay);
});
$(".classThatExistsInFormToDisplay").on("click", function() {
alert("This doesn't get called");
});
从文档on
,我发现这里面这是我是如何接近写我on
事件:
$("p").on("click", function(){
alert( $(this).text() );
});
然而,出于某种原因, live
如我所料将工作-而on
失败我。
这是不是一个问题:“我怎么可以让它工作,”因为我发现, on
会成功(捕获点击)如果我宣布它内部 function(formToDisplay)
回调。
我的问题是:什么是错on
,这是不是一个模式弹出内找到我的动态创建的元素呢? 我的jQuery的实例是jQuery的1.7.2。 jQueryUI的是21年8月1日。
这里有两个jsFiddles是近似的问题。 点击单词“测试”在这两种情况下,看到不同的行为。 在代码的唯一区别是更换on
进行live
。
当点击被捕获的live
。
当点击不是通过捕捉on
(点击“测试-点击我”看到没有发生)。
我意识到我可能只是使用on
不当或要求它做一些事情,并没有打算,但我想知道为什么它不工作(但如果你有一些非常聪明的,随时分享)。 感谢您的智慧!
更新/答案/解决方案:
根据用户“未定义”,不同的是, on
未从顶部一路授权document
对象,而live
确实/是。
克劳迪奥提到,也有部分on
文件引用动态创建的元素和你在包括$("")
的查询的一部分需要在运行时存在 。
这里是我的新的解决方案:捕获点击事件on
我的模态对话框,该对话框,虽然它不具有当运行时创建事件的任何内容时,就能找到我的内容和元素与被以后版本生成的特殊阶层。
$("#dialog").on("click", ".classThatExistsInFormToDisplay", function() {
... //(success! Event captured)
});
非常感谢!