如何避免jQuery UI可拖动也触发click事件

Jam*_*ber 17 jquery jquery-ui

A有一个大的div(地图)可以通过jQuery UI draggable拖动.div具有可点击的子div.

我的问题是,如果你拖动地图,在鼠标向上时,会在你开始拖动的任何子div上触发click事件.

如果拖动部分是拖动鼠标(如果只是点击没有拖动,而不是某人只需要点击事件,那么我如何阻止鼠标触发点击事件).

Tom*_*oer 50

$('.selector').draggable({
    stop: function(event, ui) {
        // event.toElement is the element that was responsible
        // for triggering this event. The handle, in case of a draggable.
        $( event.originalEvent.target ).one('click', function(e){ e.stopImmediatePropagation(); } );
    }
});
Run Code Online (Sandbox Code Playgroud)

这是因为"一个侦听器" "普通"侦听器之前被触发.因此,如果一个单一的监听器停止传播,它将永远不会到达您之前设置的监听器.

  • 此解决方案在FF 31中不起作用,event.toElement未定义.但是,使用event.originalEvent.target代替event.toElement将适用于所有浏览器 (7认同)
  • 小提琴显示它正在工作,但由于某种原因它不适合我...... (3认同)

Joh*_*car 9

我有这个问题,解决方案是在click事件处理程序之前应用可拖动事件处理程序.我正在移动一些代码并突然遇到这个问题.我终于意识到我已经改变了应用处理程序的顺序.当我将其切换回来时,事情再次开始正常工作 - 拖动不会导致点击.


Kli*_*nky 3

您是否可以在开始拖动时设置一个变量,例如“justDragged = true”,然后在 mouseUp 事件上检查此变量,如果为 true,则将其设置为 false,然后执行 event.preventDefault + return 而不执行任何操作。这样它会跳过拖动后的第一次单击。看起来有点hackish,也许其他人会有更优雅的解决方案。