En un proyecto reciente, existe un punto funcional: hay una casilla de verificación en la página. Cuando el usuario selecciona o deselecciona la casilla de verificación, se enviará una solicitud jsonp al fondo. La implementación en ese momento fue agregar un evento onchange a esta casilla de verificación, pero el resultado fue inesperado. Por esta razón, realicé un estudio en profundidad y descubrí que el evento onchange tenía los siguientes problemas en su rendimiento en IE y FF.
Pregunta ①: En FF, cuando se cambia el estado seleccionado de la casilla de verificación, el evento onchange se activará inmediatamente. Sin embargo, al cambiar el estado seleccionado de la casilla de verificación en IE, el evento de cambio no se activará inmediatamente, sino que se activará después de que la casilla de verificación pierda el foco.
Para resolver este problema, agregué la instrucción this.blur() al evento onclick de la casilla de verificación. Esto se debe a que el evento onclick se ejecuta antes del evento onchange, por lo que agregar this.blur() al evento Onclick provoca la casilla de verificación. perder El foco activará inmediatamente el evento onchange. Pero luego nos encontramos con un segundo problema.
Problema ②: cuando el evento onclick y this.blur se usan al mismo tiempo, se informará un error en IE.
Después de buscar información en Internet, finalmente descubrí el evento onpropertychange. Este evento no se activará bajo FF. En IE, comenzará inmediatamente cuando cambie el estado de selección de la casilla de verificación. Entonces, se llegó a la solución final: en IE, vincule el evento onpropertychange a la casilla de verificación y en FF, vincule el evento onchange a ella.
La implementación del código específico es la siguiente:
Copie el código de código de la siguiente manera:
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,
opera:(s=ua.match(/opera.([/d/.]+)/))?s[1]:falso,
safari:(s=ua.match(/varsion//([/d/.]+).*safari/))?s[1]:falso
};
if(browser.msie){//Si es el navegador IE
casilla de verificación.onpropertychange=función(){
//hacer algo
}
}
demás{
casilla de verificación.onchange=función(){
//hacer algo
}
}