2009-12-17 64 views
2

我试图让一个支持双击和双击的元素。但是,下面的例子在IE,但在Firefox 3.5.6不工作:clearTimeout在FireFox中的ondblclick事件中不起作用

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

它只是没有明确的超时,所以警报(1)被解雇。 有谁知道这是什么问题? 如何在FireFox中分别单击和双击事件?

回答

3

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

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

这解决了这个问题。谢谢! :) – Artem 2009-12-17 02:40:40

+2

这只适用于IE浏览器,因为IE浏览器在双击的过程中触发事件。有关详细信息,请参阅此处:http://webbugtrack.blogspot.com/2008/01/bug-263-beware-of-doubleclick-in-ie.html总之,第二个mousedown和第二次点击从不开火。 – scunliffe 2009-12-17 04:30:26

0

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

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

这就像在你的代码。这个例子我只是简化了它。 – Artem 2009-12-17 02:35:53

0

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

+0

Annie提供的代码示例可能不起作用,但这个想法是绝对正确的,它确实解决了我的问题。 – Artem 2010-01-26 02:15:30