jQuery .on()与将事件绑定到选择器?

时间:2012-05-31 15:32:44

标签: jquery

我正在查看有关此page的文档。他们有这样的例子......

$("p").on("click", function(){
alert( $(this).text() );
});

$("form").on("submit", false)

$("form").on("submit", function(event) {
  event.preventDefault();
});

为什么这样更好或者它与此有何不同......

$("p").click(function(){
alert( $(this).text() );
});

$("form").submit(false);

$("form").submit(function(event) {
  event.preventDefault();
});

作为最后一个问题,你为什么要这样做......

$("form").on("submit", function(event) {
  event.stopPropagation();
});

而不是......

  $("form").submit(function(event) {
      event.preventDefault();
  });

4 个答案:

答案 0 :(得分:7)

Differences Between jQuery .bind() vs .live() vs .delegate() vs .on()

本文最大的收获是......

使用.bind()方法非常昂贵,因为它将相同的事件处理程序附加到选择器中匹配的每个项目。

你应该停止使用.live()方法,因为它已被弃用并且有很多问题。

.delegate()方法在处理性能和对动态添加元素做出反应时给出了很多“砰然作响”。

新的.on()方法主要是语法糖,它可以模仿.bind(),。live()或.delegate(),具体取决于你如何调用它。

新的方向是使用新的.on方法。熟悉语法并开始在所有jQuery 1.7+项目中使用它。

答案 1 :(得分:5)

使用.on代替.click e.t.c等特定处理程序时,几乎没有差异。

  1. 目的.on()方法是提供在一种语法中附加事件处理程序所需的所有功能。您可以使用.on编写一致的语法,而不是混合使用.on.submit.click
  2. .on支持事件委派,但特定处理程序(例如:.click)不支持。请阅读here
  3. 直接和委派活动部分下的详情
  4. 使用.on,您可以绑定多个事件处理程序,例如.on('click dblclick')
  5. 使用.on可以绑定.on('click.myClick')之类的命名空间事件。在here
  6. 事件名称和命名空间部分下阅读更多内容
  7. 内部.click触发.on所以基本上你要避免额外的函数调用。 - .click source code
  8. 现在是判决,

      

    $(“form”)。on(“submit”,function(event){       event.preventDefault();     });

         

    为什么这个更好或者它与这个有什么不同

         

    $(“form”)。submit(function(event){     event.preventDefault();   });

    $("form").on(更好,因为上述原因1和5

答案 2 :(得分:3)

clicksubmit等方法只是各自ontrigger等效的便捷方法。

如果我相信它们可以提高代码的可读性,我只会使用它们。但总的来说,我发现ontrigger方法更清楚地表达了代码的意图。

答案 3 :(得分:2)

  1. 使用$.on(),即使您没有使用委托也很好,因为它在您的代码中引入了熟悉且一致的语法。
  2. 此外,它在jQuery源代码中被大量使用,这意味着你可以在调用像$.bind()这样的方法时切断中间人。
  3. 使用$.submit()$.click()分配处理程序令人困惑,因为它也用于触发这些事件。
  4. 然后还有事件委派的额外好处,它可以帮助您在仅需要添加到一个元素时将事件添加到数百个元素。假设您有100个<td>元素,并且您希望在单击时提醒其内容。你可以这样做:

    $("td").click(function(){
        alert( $(this).text() );
    });
    

    但是现在你已经添加了100个新的事件处理程序。性能真的不好。使用$.on(),您可以仅绑定<table>,并检查所有事件以查看引发它们的内容。如果是<td>,您可以做出相应的回应:

    $("table").on("click", "td", function(){
        alert( $(this).text() );
    });
    

    Voila,只绑定了一个事件,并且只在应用程序中引入了一个事件处理程序。大规模的性能提升。

    这是$.on()任何一天胜过$.click()$.submit()的最重要原因之一。