我有一个远程Web服务调用,它返回一个项目列表,然后在网页上列出,1分钟后发送一个新列表,我需要取出旧列表,确定哪些项目是新的然后修改列表。
过程中的第2步是生成所有当前列出的项目的列表,但是因为它们是通过AJAX加载的,所以我不能做一个简单的$('#items')。each();我需要使用“on”功能。
on函数使用事件,我似乎无法解决/找出如何让它“开启”......请求?我现在这样做的方式似乎很荒谬:
$.ajax({
url: url,
success: function(data) {
$('#items .item').on("click", function() {
console.log("an item");
});
$('#items .item').trigger("click");
}
});
我正在伪造“点击”事件,以便“开启”有东西要听,但这看起来很奇怪。
在不伪造点击事件的情况下使用“on”与项目进行交互的正确方法是什么,或者只是假设点击事件是唯一的方法?
编辑以澄清:
步骤1.使用HTML加载网页:
<div id="content">
<div id="items">
</div>
</div>
步骤2.在10秒后对items.php进行AJAX调用,它以项目的JSON表示响应,然后使用.each将它们插入到页面中,如下所示:
$.each(data, function(key, value) {
$('#content').append('<div class="item">'+value.title+'</div>');
});
所以它现在看起来像
<div id="content">
<div id="items">
<div class="item">title</div>
<div class="item">title</div>
</div>
</div>
步骤3. 60秒后,再次对items.php进行另一次AJAX调用,它以新项目的JSON表示进行响应。此时我需要按标题获取当前列出的项目(#items中的每个.item),并对新标题进行一些比较。
$('#items .item').each(function(){
// doesn't work because the items aren't available
});
我的谷歌搜索告诉我,我需要使用“live”,已被弃用,“on”现在用于其中......
我需要一种方法来遍历以前加载的元素。
最终编辑:
这个问题根本不存在,看起来我已经错误地给了div这个名字,并且在我的匆忙中我认为这个问题是我以前经历的:需要on / live。许多以前的Stack Overflow问题讨论了使用Javascript插入HTML进行实时/上线的需求,但它似乎专门用于用户交互。 Javascript可以很好地与加载的项目进行交互,但jquery无法在没有live / on的情况下对这些项目的用户交互起作用。
我的坏。
答案 0 :(得分:0)
你可以使用设置超时功能启动它:
这将是fire the function after 3 seconds of wait
。
function myFunction(){
$.ajax({
url: url,
success: function(data) {
console.log(data);
}
});
}
setTimeout(function(){
myFunction();
},3000);
答案 1 :(得分:0)
您可以尝试更改以下行
$('#items .item').on("click", function() {
console.log("an item");
});
到
$(document).on("#items .item","click", function() {
console.log("an item");
});