Em um projeto recente, existe um ponto funcional: há uma caixa de seleção na página. Quando o usuário marca ou desmarca a caixa de seleção, uma solicitação jsonp é enviada para segundo plano. A implementação naquele momento era adicionar um evento onchange a esta caixa de seleção, mas o resultado foi inesperado. Por esse motivo, conduzi um estudo aprofundado e descobri que o evento onchange apresentava os seguintes problemas em seu desempenho no IE e FF.
Pergunta ①: No FF, quando o estado selecionado da caixa de seleção for alterado, o evento onchange será acionado imediatamente. No entanto, ao alterar o status selecionado da caixa de seleção no IE, o evento onchange não será acionado imediatamente. Em vez disso, o evento será acionado após a caixa de seleção perder o foco.
Para resolver esse problema, adicionei a instrução this.blur() ao evento onclick da caixa de seleção. Isso ocorre porque o evento onclick é executado antes do evento onchange, portanto, adicionar this.blur() ao evento Onclick causa a caixa de seleção. perder O foco disparará imediatamente o evento onchange. Mas então, encontramos um segundo problema.
Problema ②: Quando o evento onclick e this.blur são usados ao mesmo tempo, um erro será relatado no IE.
Depois de procurar algumas informações na Internet, finalmente descobri o evento onpropertychange. Este evento não será acionado em FF. No IE, ele será iniciado imediatamente quando o status de seleção da caixa de seleção for alterado. Assim, a solução final foi alcançada: no IE, vincule o evento onpropertychange à caixa de seleção e, no FF, vincule o evento onchange a ele.
A implementação específica do código é a seguinte:
Copie o código do código da seguinte forma:
var ua=navigator.userAgent.toLowerCase();
vars=nulo;
var navegador={
msie:(s=ua.match(/msie/s*([/d/.]+)/))?s[1]:falso,
firefox:(s=ua.match(/firefox//([/d/.]+)/))?s[1]:falso,
cromo:(s=ua.match(/chrome//([/d/.]+)/))?s[1]:falso,
ópera:(s=ua.match(/opera.([/d/.]+)/))?s[1]:falso,
safari:(s=ua.match(/varsion//([/d/.]+).*safari/))?s[1]:false
};
if(browser.msie){//Se for o navegador IE
checkbox.onpropertychange=função(){
//faz alguma coisa
}
}
outro{
caixa de seleção.onchange=função(){
//fazer algo
}
}