例如我有这段代码:
<style>
.wrapper { width:1200px; height:800px; }
.column { width:900px; height:800px; margin:auto -0; }
</style>
<div class="wrapper">
<div class="column"> </div>
</div>
我希望在单击“列”外部但不在列内部时调用mousedown函数。这可能吗?
我目前的非工作代码是:
$(".wrapper:not(.column)").mousedown(function(){
alert("test");
});
更新:我实际上是在使用类,而不是ID。
答案 0 :(得分:3)
您要做的是在#column div上放置一个mousedown事件处理程序,但是在该事件处理程序中,您希望阻止事件冒泡到其容器元素。
$("#column").mousedown(function (e) {
var event = e || window.event;
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
});
以下是一个完整的示例:http://jsfiddle.net/YrXSM/
答案 1 :(得分:2)
我认为你不能停止从孩子那里调用这个函数,但你可以检测到被点击的内容。我不确定这是否是最佳方式,但这应该有效:
$("#wrapper").mousedown(function(e){
if($(e.target).attr('id') == 'wrapper')
{
//do stuff
}
});
答案 2 :(得分:1)
$(".wrapper").mousedown(function(e) {
if (this !== e.target) { return; }
alert("test");
});
因此,基本上,我们正在测试是否直接点击.wrapper
元素。如果没有,我们通过返回忽略该事件。
答案 3 :(得分:0)
$("#wrapper").mousedown(function(){
alert("test");
});
答案 4 :(得分:0)
我接近这个的方法是将另一个事件分配给没有做任何事情的#container onMouseDown,然后阻止事件冒泡。
答案 5 :(得分:0)
以下方法可以通过阻止带有类mousedown
的元素的column
事件进行冒泡,只要列元素严格包含在包装元素中,就可以正常工作。
$(".wrapper").mousedown(function(evt) {
alert("Mouse down!");
});
$(".column").mousedown(function(evt) {
evt.stopPropagation();
});
答案 6 :(得分:0)
使用e.target给出的示例是最佳选项,但是在一般情况下有可能将.mousedown()函数绑定到更复杂的选择器,如果是这种情况,您可以使用以下代码
$(".wrapper").mousedown(function(e){
if ($('.wrapper').filter(e.target).size() > 0) {
alert("test");
}
});