Какая разница между .click и .change на флажке
Я смотрел вокруг, чтобы добавить событие к флажку, и я подумал бы, что люди будут использовать .change
для настройки события изменения, но вместо этого я обнаружил, что люди используют .click
Есть ли причина для этого? Оба они, похоже, отлично работают как с нажатыми событиями, так и с изменениями клавиатуры. Я что-то пропустил?
Если вы мне не верите, попробуйте сами
Ответы
Ответ 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