Подтвердить что ты не робот

Какая разница между .click и .change на флажке

Я смотрел вокруг, чтобы добавить событие к флажку, и я подумал бы, что люди будут использовать .change для настройки события изменения, но вместо этого я обнаружил, что люди используют .click

Есть ли причина для этого? Оба они, похоже, отлично работают как с нажатыми событиями, так и с изменениями клавиатуры. Я что-то пропустил?

Если вы мне не верите, попробуйте сами

4b9b3361

Ответ 1

onchange в IE запускается только тогда, когда флажок теряет фокус. Поэтому, если вы введете на него вкладку, несколько раз нажмите пробел и перейдите на вкладку, вы получите только одно событие onchange, но несколько событий onclick.

Примечание. Это одно из очень, очень и очень редких времен, когда поведение IE правильное (согласно спецификации), а другие браузеры ошибочны.

Ответ 2

Две причины, по которым onclick предпочтительнее onchange.

  • Internet Explorer запускает событие onchange, когда флажок теряет фокус (onblur). Таким образом, onclick - это больше кросс-браузерное решение.

  • onchange происходит только после того, как элемент теряет фокус. (Вы не увидите разницы, так как вы вызываете предупреждение и теряете сосредоточенность на каждом изменении). Псевдокод в MDC в значительной степени объясняет реализацию element.onchange.

    control.onfocus = focus;
    control.onblur = blur;
    
    function focus () {
        original_value = control.value;
    }
    
    function blur () {
        if (control.value != original_value)
            control.onchange();
    }
    

Ответ 3

.change не работает корректно, по крайней мере, для некоторых популярных браузеров по отношению к ключевым изменениям (опция выбора пользователя с помощью клавиш со стрелками вверх/вниз), но затем .click также не справляется с этим. Иногда использование keyup или keydown или что-то используется в сочетании с .change для преодоления этой проблемы, однако при запуске пользователем документа, когда пользователь вводит этот документ, он начинает запутываться, поскольку это может вызвать ключевое событие, если оно явно не обрабатывается в обратном вызове. В общем, стыдно, что .change не работает так, как вы ожидали бы, поскольку это решит некоторые трудоемкие проблемы.

Ответ 4

да, оба работают, только щелчок не смотрит на фактическое изменение объекта (например, флажок, который проверяется), изменение делает.

Технически он более надежный, но на практике оба работают.

Ответ 5

Они могут оба поменять значение по умолчанию, но вы можете переопределить логику onClick, чтобы НЕ изменять значение chackbox. Вы можете изменить значение через другую точку входа. Так что нужен .click и .change.

edit - Я также согласен с Dr Rob