为什么我必须将字母'e'传递给这个jQuery函数?

时间:2012-06-15 14:34:55

标签: jquery

我知道E是“事件”的缩写,但我仍然不清楚为什么需要使用它?我尝试通过函数传递其他字母,但似乎没有用。是否还有其他需要将特定字母传递给函数的情况?

$("#myThing").click(function (e) {
   var hit = $(e.target);
   hit.css('color','blue');
});

这也是一样的事情:

$("#myThing").click(function () {
   $(this).css('color','blue');
});

我应该何时使用$(this)与'e'?

谢谢!

5 个答案:

答案 0 :(得分:4)

您无需通过该功能传递特定字母。

$("#myThing").click(function (e) {
   var hit = $(e.target);
   hit.css('color','blue');
});

相同
$("#myThing").click(function (foo) {
   var hit = $(foo.target);
   hit.css('color','blue');
});

使用$(e.target)$(this)之间的区别可能非常重要,因为this始终是与事件相关的元素,而e.target将是被点击的特定元素,即使它位于this元素

希望有意义

答案 1 :(得分:2)

名称e毫无意义;你可以随意调用它(显然只要你更新e的引用)。

您发布的代码通常执行相同的操作;但请参阅以下代码:

​<div><span>Hi</span></div>​​​​​​​​​​​​​​​​​​

JS:

​$('div').on('click', function (e) {
    alert(this === e.target);
});​​​​​

(在此处运行:http://jsfiddle.net/Dxbwm/

你会看到它是假的;那是因为this是处理事件的元素,但是e.target是事件源自的元素(在上面的示例中,是跨度)。如果你以前不知道这样的事件,那就叫做事件冒泡,你可以阅读更多关于它here 我的博客

答案 2 :(得分:1)

事件可以随身携带数据(例如Dropped文件)。如果需要引用属于该事件的数据,请使用“e”。如果您只需要引用触发事件的元素 - 这是事件回调中指的是'this',请使用'this'。

答案 3 :(得分:1)

两个片段之间存在细微差别:在第一个片段中,元素hit不能是#myThing元素本身。

假设#myThing<p>并且您点击了里面的链接:然后当事件到达#myThing时,引用的元素e.target是链接,而不是段落

相反,在第二个示例中,颜色变化的元素将始终为#myThing

因此,如果您将事件与处理程序一起传递,那是因为您可以方便地使用该事件。当您通过它时,您可以将其命名为eevtfoobar:因为您使用的是jQuery,所以您选择的变量名称不相关(但为了简单起见{ {1}}很短并且被广泛使用)。

传递此事件的最常见原因通常是

  1. 阻止事件的默认行为;
  2. 停止传播活动;
  3. - 这是你的场景 - 处理事件被触发的原始​​元素(通常在你处理事件委托或文档的实时更新时);
  4. 检查一些事件属性(例如e事件上的e.keycode);

答案 4 :(得分:1)

在这种情况下,event.targetthis指的是同一个元素。但是当你使用jQuery event delegation时,它们可能不匹配:

$('body').on('click', 'tr', function(event) { ... });

此处event.target将引用触发事件的元素(例如,可能是'td'元素或其子元素),但this将引用tr元素。有时候同时使用它们都很方便。 )

此外,是的,事件对象有一些其他用途:用它可以阻止事件的传播等。