Pergunta

Eu não sei se esta é uma 'coisa' bem conhecido ou algo novo em qualquer versão do Firefox que apenas se atualizada também - mas em qualquer caso eu não tenho nenhuma idéia de como o Google para esta pergunta então eu vou ter para pedir-lo aqui.

Eu tenho uma div no meu DOM que eu estou tentando directamente o acesso dos id, na forma mais simples como isto:

 alert(btnTest.id);

Esta multa funciona em todos os navegadores, mas estava causando problemas no firefox que realmente levaram para o navegador estar em um estado estranho 'quebrado'.

O erro que eu estava ficando era 'btnTest não está definido'. Eu não tive esse erro no Safari, Internet Explorer ou Chrome.

Eu achava que eu tinha marcas incompatíveis HTML, ou chaves JavaScript ou outra coisa faltando. Eventualmente, depois de descascar tudo o que eu tentei remover o DOCTYPE. De repente, no Firefox (v 3.0.10) que começaram a regressar a identificação correta como esperado.

O que está acontecendo !!! ?? Certamente modo 'rigorosa' deve me permitir acesso nomeado elementos, e se não, então por que todos os outros navegadores deixe-me.

Nota: Posso facilmente trabalhar em torno dele com $ ( '# btnTest') [0] .id, que é o que eu vou ter que fazer agora até que eu possa descobrir uma melhor solução.

 <!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>
Foi útil?

Solução

Não há nada em qualquer especificação W3C que diz referências de objeto devem ser estabelecidos no âmbito scripting global para elementos com atributos id. Esta é considerada a poluir uneccessarily o namespace global e pode resultar em confundir erros .

O Firefox estabelece as referências ao ser executado no modo de peculiaridades, para efeitos de compatibilidade IE. Johnny Stenback explica no terceiro comentário sobre o bug para adicionar esse suporte por que isso não é suportado no modo de padrões:

Este recurso afeta padrão código compatível com que, por exemplo verifica a existência [ sic ] de um mundial variável para configurá-lo apenas uma vez. Com esta mudança, que "varible" [ sic ] pode agora ser uma referência a um elemento no documentar, eo código não pode funcionar a forma como o desenvolvedor pretendia.

Essa é a razão decidimos fazer este peculiaridades somente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top