javascript - 当选择器元素被另一个元素遮挡时使用 jQuery .on()

标签 javascript jquery z-order

我试图让我的 jQuery 事件回调正确触发,但我似乎无法回避这样一个事实:我感兴趣的元素没有接收到事件,因为页面上有另一个元素覆盖了它。我可以将其总结如下(我对元素进行了样式设置,以便它们显示在 jsfiddle 中):

<div id='mydiv'>
    <div style="border: 1px solid; border-color: red; position: absolute; left: 0px; top: 0px; width: 200px; height: 200px; z-index: 100">Hello</div>
    <canvas style="border: 1px solid; border-color: yellow; position: absolute; left: 50px; top: 50px; width: 150px; height: 150px"></canvas>
</div>​

对于上面的片段,如果我尝试听 <canvas> 上的鼠标点击,该事件永远不会被调用:

$('#mydiv').on('mousedown', 'canvas', this, function(ev) {
    console.log(ev.target);
});

但是,如果我修改事件处理程序以监听 <div>相反,回调会按预期触发:

$('#mydiv').on('mousedown', 'div', this, function(ev) {
    console.log(ev.target);
});

我怎样才能强制我的<canvas>接收事件,同时留下违规的<div>挡在最前面?

最佳答案

正如已经提出的那样,这应该是最简单的解决方案:

http://jsfiddle.net/CUJ68/4/

$('canvas').on('mousedown', function(ev) {
    console.log(ev.target);
});
$('ul').on('mousedown', function(ev){
    $('canvas').mousedown();
});

如果您需要原始事件数据:

$('canvas').bind('mousedown', function(ev, parentEV) {
    if(parentEV){
        console.log(parentEV);
        alert("Canvas INdirectly clicked!");
    }else{
        console.log(ev);
        alert("Canvas directly clicked!");
    }
});
$('ul').on('mousedown', function(ev){
    $('canvas').trigger('mousedown', ev);
});

关于javascript - 当选择器元素被另一个元素遮挡时使用 jQuery .on(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454291/

相关文章:

javascript - 将 jquerys .toggle() 重写为 .click() 函数

javascript - Array.prototype.slice,无法获取未定义的 'slice'?

c# - 安装应用程序中的进度条

.net - 为什么我们激活它时Word没有 "come to front"?

Javascript getDay 返回四月、六月、九月、十一月的错误值

javascript - [无论] :[number] construct mean in the developer console? 是什么意思

javascript - Ajax 在页面加载时触发

javascript - 如何简洁地赋值并立即调用一个函数变量?

jquery - 使用 jQuery.data() 检索数据集

android - Google Maps v2 Marker zOrdering - 置顶