Pregunta

No sé si esto es una 'cosa' bien conocida o algo nuevo en cualquier versión de Firefox que también se haya actualizado, pero en cualquier caso no tengo idea de cómo buscar esta pregunta en Google, así que tendré Para pedirlo aquí.

Tengo un DIV en mi DOM al que intento acceder directamente por ID, en la forma más simple como esta:

 alert(btnTest.id);

Esto funciona bien en todos los navegadores, pero estaba causando problemas en Firefox que hicieron que el navegador se encontrara en un extraño estado "roto".

El error que estaba obteniendo era 'btnTest no está definido'. No obtuve este error en Safari, Internet Explorer o Chrome.

Supuse que tenía etiquetas HTML no coincidentes, llaves de JavaScript o alguna otra cosa que faltaba. Finalmente, después de quitar todo, intenté quitar el DOCTYPE. De repente, en Firefox (v 3.0.10) comenzó a devolver la ID correcta como se esperaba.

¡¡¡Qué está pasando !!! ?? Seguramente el modo "estricto" debería permitirme acceder a elementos con nombre, y si no, entonces ¿por qué todos los demás navegadores me lo permiten?

Nota: Puedo solucionarlo fácilmente con $ ('# btnTest') [0] .id, que es lo que voy a hacer ahora hasta que pueda encontrar un mejor solución.

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" class="blueCircles">

 <head>

    <script type="text/javascript"
            src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

    <script>
        $(function() {
            alert("ID retrieved through jQuery: " + $('#btnTest')[0].id);
            alert("ID retrieved by accessing global variable: " + btnTest.id);
        });

    </script>

</head>
<body>
    <div id="btnTest">
    </div>
</body>
</html>
¿Fue útil?

Solución

No hay nada en ninguna especificación de W3C que diga que las referencias de objetos deben establecerse en el ámbito global de scripting para elementos con atributos id . Se considera que esto no contamina el espacio de nombres global y puede resultar en en errores confusos .

Firefox establece las referencias cuando se ejecuta en modo peculiar para los propósitos de compatibilidad con IE. Johnny Stenback explica en el tercer comentario sobre el error para agregar este soporte por qué esto no se admite en modo estándar:

  

Esta característica afecta al estándar   código compatible que, por ejemplo,   comprueba la existencia [ sic ] de un global   Variable para configurarlo solo una vez. Con   este cambio, que " varible " [ sic ] ahora puede ser   una referencia a un elemento en el   documento, y el código puede no funcionar   la forma en que el desarrollador pretende.

     

Esa es la razón por la que decidimos hacer   esto es solo peculiaridades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top