Domanda

Non so se questa è una "cosa" ben nota o qualcosa di nuovo in qualunque versione di Firefox si sia appena aggiornata, ma in entrambi i casi non ho idea di come Google per questa domanda, quindi avrò per chiederlo qui.

Ho un DIV nel mio DOM a cui sto tentando di accedere direttamente tramite ID, nella forma più semplice come questa:

 alert(btnTest.id);

Funziona bene in tutti i browser, ma ha causato problemi in Firefox che in realtà hanno portato il browser ad essere in uno strano stato "rotto".

L'errore che stavo riscontrando era "btnTest non definito". Non ho riscontrato questo errore in Safari, Internet Explorer o Chrome.

Supponevo di avere tag HTML non corrispondenti, o parentesi graffe javascript o qualcos'altro che mancava. Alla fine, dopo aver rimosso tutto, ho provato a rimuovere il DOCTYPE. Improvvisamente in Firefox (v 3.0.10) ha iniziato a restituire l'ID corretto come previsto.

Cosa sta succedendo !!! ?? Sicuramente la modalità "rigorosa" dovrebbe consentirmi di accedere agli elementi nominati e, in caso contrario, perché tutti gli altri browser me lo consentono.

Nota: posso facilmente aggirarlo con $ ('# btnTest') [0] .id, che è quello che dovrò fare ora finché non riesco a capire un soluzione migliore.

 <!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>
È stato utile?

Soluzione

Non c'è nulla in nessuna specifica W3C che dice che i riferimenti agli oggetti dovrebbero essere stabiliti nell'ambito di scripting globale per gli elementi con attributi id . Si ritiene che ciò inquini in modo inopportuno lo spazio dei nomi globale e può risultare in errori confusi .

Firefox stabilisce i riferimenti durante l'esecuzione in modalità strane ai fini della compatibilità con IE. Johnny Stenback spiega nel terzo commento su il bug per l'aggiunta di questo supporto perché questo non è supportato in modalità standard:

  

Questa funzione influisce sullo standard   codice conforme che ad esempio   verifica l'esistenza [ sic ] di un globale   variabile per impostarlo una sola volta. Con   questa modifica, quella "variabile" [ sic ] potrebbe ora essere   un riferimento a un elemento in   documento e il codice potrebbe non funzionare   come intendeva lo sviluppatore.

     

Questo è il motivo per cui abbiamo deciso di fare   questo solo stranezze.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top