【问题标题】:clearTimeout does not work in ondblclick event in FireFoxclearTimeout 在 FireFox 的 ondblclick 事件中不起作用
【发布时间】:2010-12-27 12:11:14
【问题描述】:

我正在尝试创建一个同时支持单击和双击的元素。但以下示例在 IE 中有效,但在 FireFox 3.5.6 中无效:

<button onclick="c=setTimeout('alert(1);',1000);" ondblclick="clearTimeout(c);alert(2);">Test</button>

它只是没有清除超时,所以 alert(1) 被触发了。 有谁知道是什么问题? 如何在 FireFox 中分别设置单击和双击事件?

【问题讨论】:

    标签: javascript firefox


    【解决方案1】:

    我不明白。它仍然不起作用。我的意思是,如果您在 onclick 事件中放置一个 clerTimeout,则 onclick 事件将不起作用,因为您在完成之前停止它:S 其实我不明白你怎么能说“这解决了问题”??只需尝试复制您编写的代码,您就会发现什么都没有发生...:/

    【讨论】:

    • Annie 提供的代码示例可能不起作用,但这个想法是绝对正确的,它确实解决了我的问题。
    【解决方案2】:

    当你在 Firefox 中双击时,你会得到两个点击事件,然后是一个 dblclick 事件。因此,您设置了两个计时器并清除了一个。清除点击事件上的计时器应该可以工作:

    <button onclick="clearTimeout(c);c=setTimeout('alert(1);',1000);" ondblclick="clearTimeout(c);alert(2);">Test</button>
    

    【讨论】:

    • 这解决了这个问题。谢谢! :)
    • 这仅适用于 IE,因为 IE 在双击时触发事件的方式存在错误。有关详细信息,请参见此处:webbugtrack.blogspot.com/2008/01/… 简而言之,第二次 mousedown 和第二次单击永远不会触发。
    【解决方案3】:

    您真的不应该在 HTML 中内联您的 javascript。我建议为此使用像 jQuery 这样的 JavaScript 库。 jQuery 将解决您遇到的跨浏览器事件问题!

    $(document).ready(function() {
        var c;
        $("button").click(function() {
            c = setTimeout(function() {
                alert(1);
            }, 1000);
        }).dblclick(function() {
            clearTimeout(c);
            alert(2);
        });
    });
    

    【讨论】:

    • 就像在您的代码中一样。我只是在这个例子中大大简化了它。
    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 2021-08-14
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多