2012-03-28 54 views
17

在Internet Explorer(任何版本)中,如果您点击两次快速复选框,它只会更改一次。另一个浏览器不这样做。为什么Internet Explorer复选框接受双击但只更改状态一次?

这是“通过设计”还是一个非常奇怪的行为(bug)?

+0

早在一天,有一个“意外发现双击”选项埋在无论是IE或资源管理器的选项,可能是因为 – 2012-03-28 13:08:51

+0

你知道,如果这个选项已经存在? – 2012-03-28 16:22:31

+1

当前答案看起来不错...如果您需要解决方法或工作,请发布一些代码或您的目标是什么。你使用JQuery吗?双击有什么问题..? – 2013-03-19 19:43:16

回答

2

这似乎是IE中的一个常见错误,不仅适用于复选框,而且还适用于一般的点击处理。看起来这将是固定在IE9平台预览4:

http://webbugtrack.blogspot.com/2008/01/bug-263-beware-of-doubleclick-in-ie.html

+0

其实IE9已经发布了。 IE10也是如此。但看起来这篇文章谈论的是事件被错误地解雇,而不是你无法迅速检查和取消选中的事实。 – 2013-03-16 11:54:17

+0

@VitorCanova:正确,但这些事件是复选框用来完成它的工作... – 2013-03-16 16:20:22

+2

这不是一个错误......我走上了门。 – m4tm4t 2013-03-19 23:31:54

8

虽然我在很多不同的公司工作作为系统管理员,我常常看到使用DoubleClick作为默认操作与任何UI元素进行交互的人。他们了解Windows的第一件事就是doubleclick启动一个图标(快捷方式)。并且他们将这些知识应用到其他所有元素,无论它是实际是什么:链接,按钮,图标或复选框 =) 所以,我认为它是故意的,IE浏览器计数doubleclick为singleclick。

1

解决方法/解决方案

使用jQuery我固定这样的问题:

this.checkboxes = $('input[type="checkbox"]'); 
if (navigator.userAgent.match(/MSIE/i)){ 
     this.checkboxes.dblclick(function() { 
      if($(this).prop('checked')) {      
       $(this).prop('checked', false); 
      } else { 
       $(this).prop('checked', true); 
      } 
     }); 
} 
this.checkboxes.click(function(e) {     
    // do whatever a click should do           
}); 

说明: 在Internet Explorer中双击时,事件被触发这样的:

  1. Click
  2. Click
  3. D双击

双击时,我的点击事件中所需的动作发生了两次(就像它应该那样),但复选框没有改变状态两次。所以我简单地在双击时触发了已选中/未选中的状态。由于这会打破Firefox/Chrome /等的功能,我只在MSIE(Internet Explorer)用户代理中使用它。这样

通过上面的代码,事件和复选框态火/变化:

双击在所有浏览器,除了IE:

  1. 单击(更改状态,火灾click事件)
  2. 点击(改变状态,火灾click事件)

双击Internet Explorer中

复选框
  1. 单击(更改状态,火灾click事件)
  2. 点击(火click事件)
  3. 双击(变化状态(通过双击事件))
1

下面的代码为我工作:

<input type="checkbox" OnClick ="javascript:toggleGetSelected(this)"> 

var temp; 
function toggleGetSelected(e){ 
     if(e){ 

      // Below is the if condition which handles the double click 
      if(e.checked==true && temp==e.value){ 
        e.checked=false; 
      } 
      // ends double click handle 


      if(e.checked==true){ 
       temp=e.value; 
       // your code here      
      } 
      else{ 
       temp=null; 
       // your code here   
      } 

     } 
} 
+1

它适合我 – 2017-12-13 09:49:33

相关问题