我正在读书
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')
的名称选择元素,这就是我通常做的事情?有关写作的任何提示最简化程序代码?有太多不同的方法,但在编码时做同样的事情。
答案 0 :(得分:0)
简短的回答是,实现同样的事情的方法不止一种,这取决于具体情况。
第一个代码片段在语义方面做了一些事情:
函数声明非常清楚myHandler
不是普通函数,而是事件处理程序;这对您来说可能并不重要,但是一旦您将代码移交给其他人,或者您在几个月后回到您的代码中就会这么做。
因为它是单独声明的,所以它显示了myHandler
也将被重用的意图。我想会有更多的语句将相同的处理程序应用于其他jQuery选择器。
由于#1和#2,辅助数据不能再以正常方式传递,但也需要通过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个不同的点击处理程序。