何时将事件作为函数中的参数传递(Javascript)?



我是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()

如果没有,则必须使用参数对象访问它。

最新更新