【问题标题】:How to use ON instead of LIVE [duplicate]如何使用 ON 而不是 LIVE [重复]
【发布时间】:2012-08-14 13:50:54
【问题描述】:

可能重复:
jQuery 1.7 - Turning live() into on()

我有 jQuery:

          $(".house td[red]").live("click", function() {
              alert('ok');
          });

但功能 live 已被弃用。如何使用?

          $(".house td[red]").on("click", function() {
              alert('ok');
          });

不工作。

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:
     $(".house").on("click", 'td[red]', function() {
                  alert('ok');
              });
    

    你试过吗?详情可以查看in documentation。示例:

    $("#dataTable tbody").on("click", "tr", function(event){
        alert($(this).text());
    });
    

    所以你基本上为包装器传递了一个“容器”。不推荐live的原因是可以写成这样的“on”语法:

    $(document).on("click", '.house td[red]', function() {
                  alert('ok');
              });
    

    你可以看到效率不是很高。可能还有更多:) 所以你想改变它很好。

    【讨论】:

    • live 绑定到 document,而不是 body,尽管我不确定这有什么不同。
    • @jbabey 在你发表评论之前我已经改变了它:) 但是好快的眼睛!
    【解决方案2】:

    把它当作——

    $(document).on("click", ".house td[red]", function() {
      alert('ok');
    });
    

    更有效的方法是使用 .on() 与元素的直接父级 -

    $('.house').on("click", "td[red]", function() {
          alert('ok');
    });
    

    阅读here 以更好地了解liveon 之间的区别

    【讨论】:

    • 我更喜欢 mkk 的解决方案。效率更高。
    • 这样做你几乎失去了on 相对于live 的所有优势。来自jquery documentation:“根据其后继方法重写 .live() 方法很简单;这些是对所有三种事件附件方法进行等效调用的模板:(...)$(document).on(events, selector, data, handler); // jQuery 1.7+(...)”跨度>
    【解决方案3】:

    on() 是一个面向所有人的功能,它可以以不同的方式工作——包括直接事件和委托事件。 live() 是一种实现委托事件的方法。这是通过 on() 实现的,方法是将过滤器作为参数 2 传递,并将回调传递给参数 3:

    $(".house").on("click",  'td[red]', function() {
        alert('ok');
    });
    

    【讨论】:

      【解决方案4】:

      这是一个三参数变体,您可以选择“气泡”点:

      $('body').on('click', '.house td[red]', function() { alert("ok"); });
      

      不同之处在于,actual 事件处理程序的放置点在您的控制之下(就像同样被弃用的 .delegate() 一样)。您可以选择您喜欢的任何父元素,这在复杂页面中是一个不错的功能。 (例如,在您的情况下,您可以将处理程序放在所有“.house”元素而不是主体上。)

      【讨论】:

        【解决方案5】:
        $(document).on('click', '.house td[red]', function(){
            alert('ok');
        });
        

        Document 是我们希望将处理程序附加到的静态元素。

        第一个参数是事件

        第二个参数是选择器

        第三个参数是您希望在事件触发时针对选择器运行的函数。

        【讨论】:

          【解决方案6】:

          试试这个,

          $(document).on("click", ".house td[red]", function() {
               alert('ok');
          });
          

          【讨论】:

            【解决方案7】:
            $(".house td[red]").live("click", function() {
                alert('ok');
            });
            

            会直接转换成这个:

            $(document).on("click", ".house td[red]", function() {
                alert('ok');
            });
            

            但是您可以通过指定在绑定时已知的最近的容器来获得一些性能:

            $('#someContainer').on("click", ".house td[red]", function() {
                alert('ok');
            });
            

            【讨论】:

              【解决方案8】:
              $(document).on("click",".house td[red]",function(){
                   alert('ok');
              });
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2017-03-23
                • 1970-01-01
                • 2015-06-25
                • 2013-11-13
                • 2019-08-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多