3

我在读

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'),这就是我平时做什么?关于编写最简化程序代码的任何提示?有太多不同的方法,但在编码上做同样的事情。

4

1 回答 1

0

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

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

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

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

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

您自己的代码片段在通用代码和简单性之间做出了妥协;它没有理由爆炸。

回答您的其他问题

我为什么要使用事件?

在很多情况下你不会;以这段代码为例,基于 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 个不同的点击处理程序。

于 2012-12-03T03:53:06.580 回答