【问题标题】:How do I keep events elements added through a ajax call in jQuery "active"如何在 jQuery“活动”中保持通过 ajax 调用添加的事件元素
【发布时间】:2010-10-04 16:29:01
【问题描述】:

我通过 ajax(发布)请求将内容放置在我的页面上,如下所示:

$("input#ViewMore").click(function() {
            var data = { before: oldestDate, threadId: 1 };
            $.post("/Message/More", data,function(html) {
                $('tbody#posts').prepend(html);
                return false;
            },
            "html");
            return false;
        });

返回的 html 看起来像:

消息输出报价

一切正常,花花公子,一切正常,没有问题。

当我将一个事件挂接到通过 ajax 调用添加的“引用”锚点时,就会出现问题。具体来说,该锚点上的 jQuery 事件不会触发。为什么?

例如:

$("#quote).click(function() { ... });

什么都不做。就像上面没有事件一样。我知道它正在处理页面上未通过 ajax 请求添加的其他锚点,因此那里没有代码错误,而且如果我刷新页面,它将正确触发。发生这种情况是否有某种原因,我是否需要以某种方式重新初始化锚标记上的该事件?有什么想法吗?

使用 jQuery 1.3.1(也不适用于 1.2.6)所以我相信这是我的实现而不是代码本身。

【问题讨论】:

    标签: javascript jquery javascript-events event-handling


    【解决方案1】:

    CMS 的回答有所帮助,但结果如下:

    查看更多按钮事件与在添加它的 AJAH 请求之外保持相同:

    $("input#ViewMore").click( function() { ... }
    

    具有被添加到 AJAH 请求中和从 AJAH 请求中添加出来的事件的元素需要使用 live 方法:

    $('#quote').live("click", function() { ... }
    

    像魅力一样工作!

    【讨论】:

      【解决方案2】:

      改为

      $('#quote').live("click", function() { ... } 
      

      $("input#ViewMore").live("click", function() { ... }
      

      好像没用

      【讨论】:

        【解决方案3】:

        您可以使用 jQuery 1.3 的 Events/livelive 将处理程序绑定到所有当前和未来匹配元素的事件。

        【讨论】:

          【解决方案4】:

          当使用 Ajax 将新内容添加到页面时,您必须将所有事件重新注册到这些新元素。

          【讨论】:

          • 我该怎么做呢?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-07
          • 1970-01-01
          相关资源
          最近更新 更多