【发布时间】:2018-06-15 08:27:27
【问题描述】:
我想使用 stopImmediatePropagation 来防止同一元素上的第二个(鼠标按下)hadler 触发,但它不起作用。代码示例:
$(function() {
var showEventsMessage = function(options) {
options = $.extend({
eventType: 'CLICK',
eventTarget: this,
suffix: '<br>'
}, options);
var message = options.eventType + ': ' +
(options.eventTarget.nodeName || 'unknown') +
options.suffix;
$('#Messages').append(message);
}
$('.clickable').click(function() {
showEventsMessage.call(this, {
eventType: event.type
});
}).dblclick(function() {
showEventsMessage.call(this, {
eventType: event.type
});
}).mousedown(function() {
showEventsMessage.call(this, {
eventType: event.type
});
event.stopImmediatePropagation();
event.preventDefault();
}).mousedown(function() {
showEventsMessage.call(this, {
eventType: event.type,
suffix: '#2<br>'
});
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='clickable'>CLICK HERE ...
<p class='clickable'>or here!</p>
</div>
<div id="Messages"></div>
但是,如果我向调用 stopImmediatePropagation 的事件处理程序添加一个 event 参数(在代码中参见“ARGUMENT ADDED HERE”行),它确实有效!由于 event 是一个全局对象,这怎么可能,我不明白什么有效地改变了......!?代码示例:
$(function() {
var showEventsMessage = function(options) {
options = $.extend({
eventType: 'CLICK',
eventTarget: this,
suffix: '<br>'
}, options);
var message = options.eventType + ': ' +
(options.eventTarget.nodeName || 'unknown') +
options.suffix;
$('#Messages').append(message);
}
$('.clickable').click(function() {
showEventsMessage.call(this, {
eventType: event.type
});
}).dblclick(function() {
showEventsMessage.call(this, {
eventType: event.type
});
}).mousedown(function(event) /* ARGUMENT ADDED HERE */ {
showEventsMessage.call(this, {
eventType: event.type
});
event.stopImmediatePropagation();
event.preventDefault();
}).mousedown(function() {
showEventsMessage.call(this, {
eventType: event.type,
suffix: '#2<br>'
});
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='clickable'>CLICK HERE ...
<p class='clickable'>or here!</p>
</div>
<div id="Messages"></div>
【问题讨论】:
-
Firefox doesn't define window.event。你用的是什么浏览器?
-
Chrome、Opera、Edge 和 IE 都在事件监听器执行时定义 window.event。