Почему флажок Internet Explorer принимает двойной щелчок, но изменение состояния только один раз?

В Internet Explorer (любая версия), если вы нажмете дважды быстро, установите флажок, который изменяется только один раз. Другие браузеры этого не делают.

Это "по дизайну" или очень странное поведение (ошибка)?

Ответ 1

В то время как я работал системным администратором во многих разных компаниях, я часто видел, что люди используют doubleclick как действие по умолчанию для взаимодействия с любым элементом пользовательского интерфейса. Первое, что они узнали о Windows, - это то, что doubleclick запускает значок (ярлык). И они применяют это знание ко всем другим элементам, независимо от того, что это на самом деле: ссылка, кнопка, значок или флажок =) Итак, я предполагаю, что он сделал преднамеренно, что IE считает doubleclick как singleclick.

Ответ 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 события запускаются следующим образом:

  • Нажмите
  • Нажмите
  • Двойной щелчок

При двойном щелчке требуемое действие в событии клика произошло дважды (как и должно быть), но флажок не изменил состояния дважды. Поэтому я просто переключил проверенное/непроверенное состояние снова, когда срабатывает двойной щелчок. Поскольку это нарушит функциональность в Firefox/Chrome/etc, я использовал его только в пользовательских агентах MSIE (Internet Explorer).

С помощью приведенного выше кода события и флажки-состояния срабатывают/меняются следующим образом:

Двойной щелчок во всех браузерах, кроме IE:

  • Нажмите (изменить состояние, событие клика)
  • Нажмите (изменить состояние, событие клика)

Двойной щелчок на флажке в Internet Explorer

  • Нажмите (изменить состояние, событие клика)
  • Нажмите (событие клика)
  • Двойной щелчок (изменение состояния (через событие двойного щелчка))

Ответ 4

Следующий код работает для меня:

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

      }
}