我是Javascript事件的新手,我遇到了许多event
作为参数传递给函数的例子。因此,是否必须将event
传递给每个函数以及何时不传递它。如下代码,事件在第二个函数中传递。我很困惑什么时候通过,什么时候不通过?
var elem = document.getElementById('my-elem');
elem.addEventListener('click', function(){
//the element has been clicked... do stuff here
}, false);
$('#my-elem').click(function(e) {
//the element has been clicked... do stuff here
});
您 不传递事件,它由浏览器在所有标准事件触发器中自动完成。问题是您是否需要在所有函数中将事件作为命名参数接收,答案是,这完全取决于您是否要使用它:
何时需要访问活动:
element.addEventListener("click", foo);
// You can explicitly declare a function argument that will represent
// the event object that is automatically passed to you by the browser
function foo(evt){
// And, then you can access the event in the function
evt.xyz...
}
当您不需要访问活动时:
element.addEventListener("click", foo);
// The event is still passed to the function, but now, you don't
// have an explicit way to access it:
function foo(){
}
同样,该事件将在所有情况下传递,因此如果您决定使用参数捕获引用,它不会提高或降低性能。作为入门的一般经验法则,养成为其添加命名参数的习惯可能是个好主意,这样,如果您需要访问它,可以轻松获取它。
如果你的问题是哪些错误处理程序传递了事件对象,答案就是全部。
您通过addEventListener
或其他库添加的所有函数(如示例中的jQuery(都会获取一个event
对象作为第一个参数。
但是,JavaScript 允许您将比实际需要的更多的参数传递给函数。因此,提供一个不接受事件参数的函数是没有错的,因为浏览器等仍然可以以相同的方式调用该函数。
不, 您不必在函数上传递事件。
您必须获取该元素,并在调用要应用于该元素的函数后。
有一个应用于按钮的函数的小示例。
$("#button1").on('click',function(){
alert("clicked");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<button id="button1">
click me
</button>
$('#my-elem').click(function(e) {
//the element has been clicked... do stuff here
});
在这种情况下,您不是在传递 E(事件(,而是在函数中接收它。 当单击 #my-elem 时,浏览器将使用 event 作为第一个参数调用此函数。 您的函数接收此元素作为 e。 到达那里后,您可以看到类似
e.target
等等。
如果你需要使用它(比如在上面调用stopPropagation((,然后在你的函数中命名它。 正如 idmean 所说,无论您是否在函数定义中命名它,它都会被传递。 因为你只是在声明一个回调,所以不是你在做"传递"。 您正在传递一个函数。 调用该函数时,将使用事件参数调用它。 如果您命名它:
function (e) {}
然后你可以访问它
e.stopPropagation()
如果没有,则必须使用参数对象访问它。