В недавнем проекте есть такой функциональный момент: на странице есть чекбокс. Когда пользователь устанавливает или снимает чекбокс, в фон будет отправляться jsonp-запрос. Реализация на тот момент заключалась в добавлении события onchange в этот флажок, но результат оказался неожиданным. По этой причине я провел углубленное исследование и обнаружил, что событие onchange имело следующие проблемы в работе под IE и FF.
Вопрос ①: В FF, когда выбранное состояние флажка изменяется, событие onchange запускается немедленно. Однако при изменении выбранного статуса флажка в IE событие onchange не будет запущено немедленно. Вместо этого событие будет запущено после того, как флажок потеряет фокус.
Чтобы решить эту проблему, я добавил оператор this.blur() к событию onclick флажка. Это связано с тем, что событие onclick выполняется до события onchange, поэтому добавление this.blur() к событию Onclick приводит к появлению флажка. потерять Фокус немедленно вызовет событие onchange. Но затем мы столкнулись со второй проблемой.
Проблема ②: Когда событие onclick и this.blur используются одновременно, в IE будет сообщено об ошибке.
После поиска информации в Интернете я наконец обнаружил событие onpropertychange. Это событие не будет вызвано в FF. В IE он начнется сразу же, как только изменится статус выбора флажка. Итак, окончательное решение было достигнуто: под IE привязать событие onpropertychange к флажку, а под FF привязать к нему событие onchange.
Конкретная реализация кода выглядит следующим образом:
Скопируйте код кода следующим образом:
вар ua=navigator.userAgent.toLowerCase();
варс = ноль;
вар браузер={
msie:(s=ua.match(/msie/s*([/d/.]+)/))?s[1]:false,
firefox:(s=ua.match(/firefox//([/d/.]+)/))?s[1]:false,
chrome:(s=ua.match(/chrome//([/d/.]+)/))?s[1]:false,
опера:(s=ua.match(/opera.([/d/.]+)/))?s[1]:false,
safari:(s=ua.match(/varsion//([/d/.]+).*safari/))?s[1]:false
};
if(browser.msie){//Если это браузер IE
checkbox.onpropertychange=функция(){
//сделать что-нибудь
}
}
еще{
checkbox.onchange=function(){
//сделать что-нибудь
}
}