2

我调用了一个远程 Web 服务,该服务返回一个项目列表,然后在网页上列出,1 分钟后发送一个新列表,我需要获取旧列表,找出哪些项目是新的,然后修改名单。

该过程中的第 2 步是生成所有当前列出的项目的列表,但是因为它们是通过 AJAX 加载的,所以我不能做一个简单的 $('#items').each(); 我需要使用“开启”功能。

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 的情况下对用户与这些项目的交互起作用。

我的错。

4

2 回答 2

0

您可以使用设置超时功能触发它:

这将fire the function after 3 seconds of wait

function myFunction(){
   $.ajax({
      url: url,
      success: function(data) {

           console.log(data);
      }
   });
}

setTimeout(function(){
    myFunction();
},3000);
于 2012-12-14T08:16:04.530 回答
0

您可以尝试更改以下几行吗

    $('#items .item').on("click", function() {
        console.log("an item");
    });

   $(document).on("#items .item","click", function() {
        console.log("an item");
    });
于 2012-12-14T08:33:00.707 回答