Javascript Can';t向使用.getJSON()创建的内容添加事件处理程序

Javascript Can';t向使用.getJSON()创建的内容添加事件处理程序,javascript,jquery,json,Javascript,Jquery,Json,为清晰起见编辑的问题 我使用$.getJSON()方法进行AJAX调用,并在回调函数中向页面添加一些元素: $.getJSON("pathToFile/file.json", function(data) { $.each(data.lst, function(i, item) { /* Add HTML elements to the page.. */ }); }); 所有这些都正确显示,但我为元素添加的事件处理程序不起作用: $(".newElement").on("click"

为清晰起见编辑的问题

我使用
$.getJSON()
方法进行AJAX调用,并在回调函数中向页面添加一些元素:

$.getJSON("pathToFile/file.json", function(data) {
    $.each(data.lst, function(i, item) { /* Add HTML elements to the page.. */ });
});
所有这些都正确显示,但我为元素添加的事件处理程序不起作用:

$(".newElement").on("click", "input", function() {
    alert("Something happened..");
});
当我点击输入元素时,什么也没有发生。我错过了什么

解释


正如@jbabey善意地指出的,声明必须将事件处理程序绑定到现有元素。代码不起作用,因为应用事件处理程序时元素不存在。

是否在任何地方出现错误,或者什么都没有发生?你能在流量中看到任何有用的信息吗(小提琴手、萤火虫等)

我首先建议将$.getJSON的用法更改为,以便添加错误处理程序,然后我们可以调查实际问题

关于使用jQuery进行ajax调用的不同方法的一篇好文章可以在这里找到:

您在哪里添加了()上的
.on
代码?它必须在添加元素之后出现。这段代码肯定可以改进。将回调传递给
.html()
,而不让它返回新内容是没有意义的。我建议您更多地使用DOM元素,而不是HTML字符串。这将使事情更清楚。多行字符串设置在所有较新的浏览器中都有效吗?我想是的。这是有趣和有用的信息,但他说内容显示正确。内容显示正确,没有任何错误。谢谢你提供的信息(jbabey:)。如果内容正确(很抱歉我错过了这一部分),那么我会检查你的html格式是否正确。通过字符串连接构造HTML可能会导致一些意外行为。在这里查看一个简单的演示:Hi-jbabey,thx为您提供答案。我编辑了上面的帖子,解释了.live()有效,而.on()无效。我仍然不明白为什么,但我想我可以接受jquery的on()文档中的.live():“事件处理程序仅绑定到当前选定的元素;它们必须在代码调用.on()时存在于页面上。”-如果调用.on()时ajax调用尚未完成,那么chaAdv类的div就不存在了。如果是这样的话,live将起作用,on将失败。