为什么Internet Explorer复选框接受双击但只更改状态一次?

时间:2012-03-28 12:56:57

标签: internet-explorer

在Internet Explorer(任何版本)中,如果您快速单击两次复选框,它只会更改一次。另一个浏览器不这样做。

这是“按设计”还是一种非常奇怪的行为(错误)?

4 个答案:

答案 0 :(得分:10)

当我在许多不同公司担任系统管理员时,我经常看到人们使用doubleclick作为默认操作来与任何UI元素进行交互。他们了解Windows的第一件事是双击启动图标(快捷方式)。他们将这些知识应用于其他所有元素,无论它实际是什么:链接,按钮,图标或复选框 =) 因此,我认为它是故意制作的,IE计算双击作为单击。

答案 1 :(得分:3)

解决方法/解决方案

使用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. 点击
  2. 点击
  3. 双击
  4. 双击,我点击事件中的所需操作发生两次(就像它应该),但复选框没有两次更改状态。因此,当双击时,我只是再次切换已选中/未选中状态。由于这会破坏Firefox / Chrome / etc中的功能,我只在MSIE(Internet Explorer)用户代理中使用它。

    使用上面的代码,事件和复选框状态会像这样触发/更改:

    双击除IE以外的所有浏览器:

    1. 单击(更改状态,触发点击事件)
    2. 单击(更改状态,触发点击事件)
    3. 双击Internet Explorer中的复选框

      1. 单击(更改状态,触发点击事件)
      2. 点击(触发点击事件)
      3. 双击(更改状态(通过双击事件))

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

以下代码适用于我:

<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           
            }

      }
}