【问题标题】:jQuery how to have a event only triggered once on clicking a divjQuery如何在单击div时仅触发一次事件
【发布时间】:2009-12-14 09:07:45
【问题描述】:

这可能是在推动 jquery 的极限。

我想触发 live() 事件。但我只想让它使用 one() 事件触发一次。

目前我遇到了代码问题。如何将其限制为仅被调用一次。

    $(".sub-content").live('click', function() {
        var id = this.id;
        $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) } );
    });

【问题讨论】:

    标签: jquery events live


    【解决方案1】:

    有几种方法可以做到这一点。首先你可以只使用一个标记:

    <div class="sub-content not-loaded">...</div>
    

    与:

    $("div.sub-content.not-loaded").live("click", function() {
      $(this).removeClass("not-loaded");
      ...
    });
    

    显然,您也可以通过其他方式执行此操作(添加一个类以标记它已被加载)。我不是 100% 以上将被正确处理 live() 在这种情况下:

    $("div.sub-content.not-loaded").live("click", function() {
      if ($(this).hasClass("not-loaded")) {
        $(this).removeClass("not-loaded");
        ...
      }
    });
    

    会起作用的。

    您也可以取消绑定事件。

    $("div.sub-content").click(load_content);
    
    function load_content() {
      $(this).unbind("click", load_content);
      ...
    }
    

    我不能 100% 确定它会与 live() 一起使用(因为 live() 可能只是重新绑定它)。

    【讨论】:

    • 在这种情况下似乎不起作用,但无论如何我肯定学到了一些东西,谢谢。
    【解决方案2】:

    您可以使用die 方法:

    $(".sub-content").live('click', function() {
       $(this).die('click');
       var id = this.id;
       $.get("InfoRetrieve", { theid:id }, function(data) { addContent(data, id) } );
    });
    

    不过我从来没有测试过。

    【讨论】:

    • 这将删除所有点击事件。 OP 只想确保每个 div 只加载一次,这并不完全相同。当单击第一个 div 时,您的方式会杀死所有单击事件,因此无法单击其他 div。
    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2013-02-04
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多