永远存在的事件,不管你喜不喜欢
即使您不提供名称,该事件也始终存在:
$(".foo").on("click", function(){
alert( arguments[0].type );
});
这和这样说是一样的:
$(".foo").on("click", function(event){
alert( event.type );
});
事件对象已经被传递给您的回调(无论您是否为其提供名称),如果您愿意,您可以选择不使用它。例如,如果我们查看 jQuery onClick 方法:
$(".foo").on("click", function(){
/* Do stuff */
});
利用它
您会注意到我的回调中没有引用事件对象。我不需要。但是,如果我想使用它,无论出于何种目的,我都应该给它一个名字:
$(".foo").on("click", function(myEvent){
myEvent.preventDefault();
myEvent.stopPropagation();
});
现在我已授予自己访问事件详细信息的权限,我可以防止该事件导致的默认行为,并且我还可以阻止该事件将 DOM 冒泡到其他元素。
实际例子
假设我们想监听一个元素的点击事件:
$("#bigSquare").on("click", function(event){
/* Do something */
});
当您单击元素本身或其任何子元素时,单击事件会在元素上发生。现在假设这个元素有两个孩子:
<div id="bigSquare">
<div id="redSquare"></div>
<div id="blueSquare"></div>
</div>
单击其中任何一个,大方块、红色方块或蓝色方块都会在大方块上引发“点击”事件——在它引发您首先点击的任何元素的点击事件之后(事件在 DOM 中冒泡)。
我们可以通过事件本身确定在任何点击事件中哪个元素是目标:
$("#bigSquare").on("click", function(event){
alert( event.target.id );
});
请注意这里我们如何访问引发事件的目标的 ID。如果您单击红色方块,当该事件冒泡到大方块时,我们将看到警报“redSquare”。蓝色方块也是如此。如果您单击它,该事件将冒泡到大广场,我们将看到警报“blueSquare”。
您可以通过以下演示在线测试:http: //jsbin.com/ejekim/edit#javascript,live
尝试单击橙色、红色或蓝色方块以查看警报内容。