我是JavaScript / jQuery的新手,我一直在学习如何创建函数。许多功能都出现了(e)括号内。让我告诉你我的意思:
$(this).click(function(e) {
// does something
});
看起来该函数似乎甚至没有使用(e)的值,为什么它经常出现?
答案 0 :(得分:91)
e
是event
对象的short var引用,它将传递给事件处理程序。
事件对象本质上有很多有趣的方法和属性,可以在事件处理程序中使用。
在您发布的示例中,是一个MouseEvent
$(<element selector>).click(function(e) {
// does something
alert(e.type); //will return you click
}
DEMO - 鼠标事件DEMO使用e.which
和e.type
一些有用的参考资料:
http://api.jquery.com/category/events/
http://www.quirksmode.org/js/events_properties.html
http://www.javascriptkit.com/jsref/event.shtml
答案 1 :(得分:36)
免责声明:这是对这个特定帖子的一个非常晚的回应,但正如我一直在阅读对这个问题的各种回答,让我感到震惊的是,大多数答案都使用的术语只能是经验丰富的程序员理解。这个答案试图在考虑新手的情况下解决原始问题。
小的'(e)'事实上是Javascript中更广泛范围的一部分,称为事件处理函数。每个事件处理函数都接收一个事件对象。出于本讨论的目的,将对象视为包含一堆属性(变量)和方法(函数)的“东西”,就像其他对象一样。语言。句柄,(e)内部的' e '就像一个允许你与对象交互的变量(我使用术语变量非常松散)。
考虑以下jQuery示例:
$("#someLink").on("click", function(e){ // My preferred method
e.preventDefault();
});
$("#someLink").click(function(e){ // Some use this method too
e.preventDefault();
});
发生了什么事?
当用户点击id “#someLink”(可能是锚标记)的元素时,请调用匿名函数“function(e)”,然后分配结果对象为处理程序,“e”。现在接受该处理程序并调用其中一个方法“e.preventDefault()”,这将阻止浏览器对该元素执行默认操作。
注意: 句柄几乎可以任意命名(即' function(billybob)')。 'e'代表'事件',这似乎是这类函数的标准。
虽然'e.preventDefault()'可能是事件处理程序的最常见用法,但对象本身包含许多可通过事件处理程序访问的属性和方法。
有关此主题的一些非常好的信息可以在jQuery的学习网站http://learn.jquery.com找到。请特别注意Using jQuery Core和Events部分。
答案 2 :(得分:28)
e
没有任何特殊含义。当参数为e
时,它只是使用event
作为函数参数名称的约定。
可以是
$(this).click(function(loremipsumdolorsitamet) {
// does something
}
。
答案 3 :(得分:7)
在该示例中,e
只是该函数的一个参数,但它是通过它传入的event
对象。
答案 4 :(得分:7)
e
参数是事件对象的简称。例如,您可能希望为取消默认操作的锚点创建代码。要做到这一点,你会写一些类似的东西:
$('a').click(function(e) {
e.preventDefault();
}
这意味着点击<a>
代码时,请阻止点击事件的默认操作。
虽然您可能经常看到它,但即使您已将其指定为参数,也不必在函数中使用它。
答案 5 :(得分:4)
在e
的jQuery event
缩写中,是当前的事件对象。它通常作为要触发的事件函数的参数传递。
在演示中,我使用了e
$("img").on("click dblclick mouseover mouseout",function(e){
$("h1").html("Event: " + e.type);
});
我也可以使用event
$("img").on("click dblclick mouseover mouseout",function(event){
$("h1").html("Event: " + event.type);
});
同样的事情!
程序员很懒,我们使用了很多简写,部分是减少了我们的工作,部分是有助于提高可读性。理解这将有助于您理解编写代码的心态。
答案 6 :(得分:4)
今天我刚写了一篇关于&#34的文章;为什么我们在e.preventDefault()中使用“e”这样的字母?&#34;而且我认为我的答案会有所帮助......
首先,让我们看一下addEventListener
的语法通常会是: target.addEventListener(type,listener [,useCapture]);
addEventlistener参数的定义是:
type :表示要侦听的事件类型的字符串。
侦听器:在指定类型的事件时接收通知(实现Event接口的对象)的对象 发生。这必须是实现EventListener的对象 接口或JavaScript函数。
(来自MDN)
但我认为应该注意一件事: 当您使用Javascript函数作为侦听器时,实现Event接口(对象事件)的对象将自动分配给函数的&#34;第一个参数&#34; 。所以,如果你使用函数(e),该对象将被分配给&#34; e&#34;因为&#34; e&#34;是函数的唯一参数(绝对是第一个参数!),那么你可以使用e.preventDefault来防止某些事情....
让我们尝试以下示例:
<p>Please click on the checkbox control.</p>
<form>
<label for="id-checkbox">Checkbox</label>
<input type="checkbox" id="id-checkbox"/>
</div>
</form>
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
//var e=3;
var v=5;
var t=e+v;
console.log(t);
e.preventDefault();
}, false);
</script>
结果将是: [object MouseEvent] 5 ,您将阻止点击事件。
但如果你删除评论标记,如:
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var e=3;
var v=5;
var t=e+v;
console.log(t);
e.preventDefault();
}, false);
</script>
你会得到: 8 和错误:&#34;未捕获的TypeError:e.preventDefault不是函数 在HTMLInputElement。 (VM409:69)。&#34;
当然,这次不会阻止点击事件。因为&#34; e&#34;在函数中再次定义。
但是,如果您将代码更改为:
<script>
document.querySelector("#id-checkbox").addEventListener("click", function(e,v){
var e=3;
var v=5;
var t=e+v;
console.log(t);
event.preventDefault();
}, false);
</script>
每件事情都会再次发挥作用......你将获得 8并阻止点击事件 ......
因此,&#34; e&#34;只是你的功能的一个参数,你需要一个&#34; e&#34;在你的function()中接收&#34;事件对象&#34;然后执行e.preventDefault()。这也是你可以改变&#34; e&#34;任何未被js保留的词。
答案 7 :(得分:2)
它是对当前事件对象的引用
答案 8 :(得分:-1)
$(this).click(function(e) {
// does something
});
参考上面的代码
$(this)
是作为某些变量的元素。
click
是需要执行的事件。
参数e
会自动从js传递到您的函数,该函数保存$(this)
值的值,并且可以在您的代码中进一步用于执行某些操作。