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

18

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

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

    
задан Vitor Canova 28.03.2012 в 14:56
источник
  • . В тот же день появилась опция «обнаружить случайные двойные щелчки», которая была захоронена в IE или вариантах проводника, может быть, это –  Alex K. 28.03.2012 в 15:08
  • Знаете ли вы, существует ли эта опция? –  Vitor Canova 28.03.2012 в 18:22
  • текущий ответ выглядит нормально ... если вам нужна работа или решение, пожалуйста, напишите какой-то код или какова ваша цель. Вы используете JQuery? что не так с двойным щелчком ..? –  d.raev 19.03.2013 в 20:43
  • Это просто любопытство. Я действительно ожидал некоторых «официальных» источников об этом поведении. Я все еще надеюсь, что это появится, но я несколько доволен ответом coromba. Если истечет время битвы, он победит. Я хочу уточнить, что я никогда не упоминал, что этот вопрос является вопросом. Это всего лишь вопрос о поведении браузера. ;) –  Vitor Canova 20.03.2013 в 15:58

4 ответа

8

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

    
ответ дан Denis O. 19.03.2013 в 21:36
2

Это, по-видимому, общая ошибка в IE, которая применяется не только к флажкам, но и к обработке кликов в целом. Похоже, он будет исправлен в IE9 Platform Preview 4:

Ссылка

    
ответ дан Markus A. 16.03.2013 в 01:17
  • На самом деле IE9 уже выпущен. IE10 тоже. Но похоже, что в этой статье говорится о том, что события уволены неправильно, а не о том, что вы не можете проверить и снять отметку очень быстро. –  Vitor Canova 16.03.2013 в 12:54
  • @VitorCanova: Правильно, но эти события - это то, что используется флажком, чтобы сделать его toggeling ... –  Markus A. 16.03.2013 в 17:20
  • Это не ошибка. Я забираю дверь. –  m4tm4t 20.03.2013 в 00:31
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. Нажмите
  2. Нажмите
  3. Двойной щелчок

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

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

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

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

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

  1. Нажмите (изменить состояние, событие клика)
  2. Нажмите (событие клика)
  3. Двойной щелчок (изменение состояния (через событие двойного щелчка))
ответ дан ProblemsOfSumit 07.06.2013 в 11:20
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           
            }

      }
}
    
ответ дан shridevi bhat 15.06.2016 в 10:09
  • Это работает для меня –  shridevi bhat 13.12.2017 в 10:49