如何在jQuery中重新触发(或延迟触发)mousedown事件?

3
最近有一个问题一直困扰着我:在mousedown处理程序中,我使用preventDefault()来防止文本在拖动时被选中:
$(document).bind('mousedown', function(event){
    event.preventDefault();
});

目前为止还不错。

然后,在仍按下鼠标按钮的情况下,我想等待触发longclick事件(http://github.com/pisi/Longclick),并让longclick处理程序以某种方式恢复原始的mousedown事件,并开始文本选择,就好像事件的默认值从未被阻止过一样。

有没有一种方法能够晚一点触发原生的鼠标事件?

.trigger是否能够以某种方式接受现有的(存储的)事件对象?例如这样:

var originalEvent;

$(document)
    .bind('mousedown', function(event){
        event.preventDefault();
        originalEvent= event;
    })
    .bind('longclick', function(event){
        $(event.target).trigger(originalEvent)
    })

我希望能够拖动整个文字段落,并仍然有可能在段落内执行文本选择。

欢迎所有答案、建议和想法!

1个回答

1
将事件对象传递给 trigger 对于 jQuery 来说是有效的(使用 jQuery 绑定的事件处理程序将被执行,并接收该对象作为参数),这使您可以做一些很酷的事情,比如 this,但不会发生默认操作。大多数浏览器支持 DOM level 2 规范 dispatchEvent,除了 the usual suspect,它使用 fireEvent 替代,但它几乎没用,因为它不会触发默认操作。

好的,Tgr。谢谢你澄清。我也在jQuery论坛上发布了这个问题,并得到了完全相同的答案(http://forum.jquery.com/topic/how-to-re-trigger-or-late-trigger-a-mousedown-event-in-jquery#14737000001842174)。看来这是不可能的。真遗憾。 - Petr Vostrel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接