如何在没有用户交互的情况下通过ajax触发jquery“on”事件

时间:2012-12-14 08:08:56

标签: jquery

我有一个远程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的情况下对这些项目的用户交互起作用。

我的坏。

2 个答案:

答案 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");
    });