【问题标题】:Is there a way to set javascript mouse event order?有没有办法设置javascript鼠标事件顺序?
【发布时间】:2015-11-19 14:30:13
【问题描述】:

我正在开发一个 jQuery 插件,它可以拦截多个用于不同目的的鼠标事件(mousedown、mouseup、mouseout、click)。

但有时由于一个事件在另一个事件之前触发,它无法正常工作。

我无法真正复制它,所以请理解我做了一些研究(例如我找到了http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-eventgroupings)。

如何设置鼠标顺序触发(例如点击后鼠标向上)?如果需要,我可以使用 jQuery。

【问题讨论】:

  • 事件顺序始终相同。你想做什么?
  • click始终mousedown,后跟mouseup。如果您按住鼠标按钮,然后在松开之前将光标移开,那么它可能不会算作click
  • 但是mouseup 是否保证在click 之前触发,反之亦然?
  • @Dunnie click 是完整的动作:mousedown + mouseup,所以本质上你期望在监听来自@987654331 的 mouseup 事件时触发相同的事件@和mouseup
  • @AGE 不一定:您可能希望将一个事件绑定到mouseup,将另一个事件绑定到click。我可以想象,您可能会想在不寻常的情况下这样做。

标签: javascript


【解决方案1】:

据我所知,排序取决于浏览器,因此您不能依赖特定的顺序。

设置/检查标志对你有用吗?例如

<button id="myButton">Click Me!</button>

<script>
    function doSomething() {
        alert("Hello world!");
    }

    var mouseUpFired = false;
    var clickFired = false;
    // etc

    $(document).mouseup(function() {
        mouseUpFired = true;
        if(mouseUpFired && clickFired /*etc*/) {
            doSomething();
        }
    });

    $(document).click(function() {
        clickFired = true;
        if(mouseUpFired && clickFired /*etc*/) {
            doSomething();
        }
    });
</script>

【讨论】:

  • 正如我所说,重现它非常困难,但您对浏览器依赖性的看法可能是正确的。我认为你的解决方案很好
  • 但是,我在想,您的解决方案会导致不触发事件。例如:假设当 .click() 触发器运行时,如果 mouseUpFired == false,它将跳过 doSomething(),这绝对是一个不可取的场景
  • @dragonmnl 这取决于您的确切逻辑需要是什么。我的例子只是一个想法或一个起点。例如,您可以从click 处理程序中删除if 语句,并在每次点击时运行doSomething(),但如果之前发生过click,则仅在mouseup 上运行它。
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多