如果iframe中发生了鼠标按下,文档不会触发mousemove事件
document won't fire mousemove event if mousedown occurred in iframe
我有一个相同的原始iframe。iframe中的鼠标事件在文档中触发,如下所示:
// this won't work
$('iframe').contents().find('body').on('mousedown mouseup mousemove', function(e) {
$(document).trigger(e);
});
// this does work
$('iframe').contents().on('mousedown mouseup mousemove', function(e) {
$(document).trigger(e);
});
我的问题是,如果鼠标下降发生在iframe和鼠标离开iframe,文档不会触发它自己的鼠标移动事件,直到鼠标上升发生。
我已经尝试在鼠标离开iframe时触发iframe和文档中的mouseup,但是文档的mousemove事件将不会恢复,直到发生物理的mouseup。
这就是我在一个有多个iframe的页面上工作的方法:
$(function() {
$('iframe').each(function(index) {
$(this).load(function () {
$(this).contents().on("mousedown", function (e) {
$(document).trigger(e);
})
.on("mouseup", function (e) {
$(document).trigger(e);
});
});
});
});
它也只适用于一个iframe。重要的部分是在绑定事件之前等待帧加载完成,否则可能无法正常工作。在我的例子中,鼠标事件在一个iframe中被正确检测到,但在另一个iframe中没有。
使用对象文字表示法,您可以向.on()中添加多个事件。然后我添加了。contents()来让所有的事件在Iframe内工作。这是一个工作小提琴
$('.myiframe').contents().on({
mousedown: function () {
console.log('mouse down triggered');
},
mouseup: function () {
console.log('mouse up triggered');
},
mousemove: function() {
console.log('mouse move triggered');
}
});
当您从页面调用上述代码时,需要一些时间来加载框架主体。因此,它不能附加框架鼠标移动事件监听器。如果你用settimeout函数调用它,它将能够获取帧的内容,move将被附加到帧的主体。
:)
相关文章:
- 我应该/如何清除mousemove JQuery事件侦听器
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- jQuery UI draggable:绑定到mousemove事件中的对象
- 如何正确停止mousemove事件
- 如何在angularjs单元测试中触发mousemove事件
- 用标准javascript而不是jquery中的mousedown、mousemove和mouseup触摸事件句柄
- 在 mousemove() 事件处理程序中按下哪个鼠标键
- `mousemove’并触发自定义事件
- Iframe阻碍了mousemove事件的发生
- 如何使用jquery将mousemove事件从iframe发送回父级
- iframe中的JavaScript mousemove事件
- mousemove事件无法像Javascript中预期的那样工作
- 当鼠标超过闪光灯时,Javascript mousemove事件不会触发
- 在mousemove事件javascript中获取光标坐标
- 如何减少mousemove事件的速度减慢
- 注册MouseMove:事件对象始终未定义
- 如果iframe中发生了鼠标按下,文档不会触发mousemove事件
- 无法监听iframe内的mousemove事件
- 鼠标事件"mousemove"在按下和释放鼠标按钮时触发
- JQuery,为什么我的mousemove监听器不传递事件对象?