2011-08-04 8 views
6
<!doctype html> 
<body> 
<input onblur="alert('b');"> 
<button onmousedown="alert('m');">a</button> 
</body> 

Por alguna razón, el desenfoque parece dispararse primero en FF/IE (pero el mousedown parece dispararse primero para Chrome/Safari).¿Se debe desenfocar o disparar el mouse primero?

Sin embargo, cuando cambie el código para esto:

<!doctype html> 
<body> 
<input onblur="document.title+='b';"> 
<button onmousedown="document.title+='m';">a</button> 
</body> 

Ahora, por alguna razón mousedown parece disparar primero para todos los navegadores.

1) ¿Cuál puede ser la explicación de esta anomalía?

2) Según las especificaciones W3C, ¿cuál debería ser el comportamiento estándar?

Respuesta

1

Oh Dios mío, esa es una historia interminable. No quiero saber cuántas horas pasé para entender ese comportamiento correctamente. Como mencionaste, se comporta de manera diferente, por lo que en realidad no hay "correctos". Sin embargo, no estoy muy al tanto de las especificaciones del W3C sobre esta instancia en particular (si existe actualmente?), Pero para saberlo, debe crear una lógica para que las cosas se disparen en el orden correcto. Es bastante desagradable aunque

+0

cuál es la solución que suelen utilizar ? Estoy usando * flag + setTimeout, 1 * way pero se siente muy sucio – Pacerier

9

Así que para esta prueba he hecho este fiddle

<input onblur="document.getElementById('msg').innerHTML+=new Date().getTime()+' - blur<br/>'"> 
<button onmousedown="document.getElementById('msg').innerHTML+=new Date().getTime()+' - md<br/>'">a</button> 
<div id="msg">---<br/></div> 

En Windows XP SP3, en Fx5, IE8, Opera 11, Safari5, Chrome 13 es todo mouseDown primera, desenfoque después

ACTUALIZACIÓN: SALVO cuando usas alerta No puede contar con que nada funcione de la forma que desee si coloca una alerta en alguna parte.

Por ejemplo, algunos navegadores (mayores) entraría en un bucle sin fin si alertado un onBlur error y luego intentó hacer uso del campo ofensivo, que luego difuminar el siguiente campo vacío

+0

declaración poderosa. es lo mismo para mí también. pero ¿cómo se explica la anormalidad del código que se muestra en la pregunta en IE y FF? – Pacerier

+0

Esa alerta dispara el desenfoque más rápido que el mousedown? Todas las apuestas se apagan cuando alerta algo. – mplungjan

+0

sí esa alerta dispara el desenfoque más rápido que el mousedown. será el caso para ti también – Pacerier

Cuestiones relacionadas