了解使用.on()传递数据

时间:2012-12-03 03:06:31

标签: javascript jquery

我正在读书

function myHandler(event) {
    alert(event.data.foo);
}

$("p").on("click", { foo: "bar" }, myHandler)

但我认为我可以通过

来做到这一点
  function myHandler(a) {
      alert(a);
  }
  $("p").on("click", function() { myHandler('bar') })

为什么我会使用事件,实际上是什么事件,我也看到很多人在他们的代码中使用“this”和“that”,但我无法理解它是什么,为什么不按照$('#something')的名称选择元素,这就是我通常做的事情?有关写作的任何提示最简化程序代码?有太多不同的方法,但在编码时做同样的事情。

1 个答案:

答案 0 :(得分:0)

简短的回答是,实现同样的事情的方法不止一种,这取决于具体情况。

第一个代码片段在语义方面做了一些事情:

  1. 函数声明非常清楚myHandler不是普通函数,而是事件处理程序;这对您来说可能并不重要,但是一旦您将代码移交给其他人,或者您在几个月后回到您的代码中就会这么做。

  2. 因为它是单独声明的,所以它显示了myHandler也将被重用的意图。我想会有更多的语句将相同的处理程序应用于其他jQuery选择器。

  3. 由于#1和#2,辅助数据不能再以正常方式传递,但也需要通过Event传递。

  4. 您自己的代码段在通用代码和简单性之间做出妥协;并且没有理由说它会爆炸。

    回答您的其他问题

      

    我为什么要使用活动?

    在许多情况下你不会;以此代码为例,基于jQuery事件处理最常用的功能:

    <a href="http://www.example.org">...</a>
    
    $('a').on('click', function(e) { 
        e.preventDefault();
        // do something beautiful
    });
    

    此处,事件e将传递给点击处理程序,然后在单击链接时停止浏览器导航到链接。这可以通过以下方式实现:

    $('a').on('click', function() { 
        // do something beautiful
        return false;
    });
    

    虽然上面代码的意图不那么明显,但它完全没有触及事件。

      

    实际上是什么事件?

    它封装了有关各种用户输入的数据,例如按键,点击,拖动等.jQuery对其进行了概括,并通过数据传递功能对其进行了扩展。另见:Event object

      

    为什么不按名称选择元素?

    这里没有权威的答案,但是当您使用this引用被点击的元素(或基于它的选择器来引用父级,兄弟姐妹等)时,单击处理程序代码会变得更通用和可维护;如果您需要将相同的行为添加到其他元素,则不必编写X个不同的点击处理程序。