10

Sto avendo un problema reale con portata JavaScript in IE 9.IE tiri Errore JavaScript: Il valore della proprietà 'googleMapsQuery' è null o undefined, non un oggetto Function (funziona in altri browser)

Questo è dentro il corpo del mio documento (sì, mi rendo conto che lo script dovrebbe andare in testa per l'HTML corretto, ma non ho mai avuto uno script in precedenza). Lo script è nel corpo, perché non voglio fare confusione con una pagina di intestazione condivisa per uno script che è rilevante solo per questa pagina:

<script type="text/javascript"> 
function googleMapsQuery(accountNum) { 
    // function code is here (omitted for brevity) 
} 
</script> 

Questo è all'interno di un blocco td all'interno di un blocco tr all'interno di un tbody bloccare all'interno di un blocco table all'interno di un blocco form all'interno body:

<button id="google-422111" onclick="googleMapsQuery(422111)" type="button">Google This!</button> 

ho anche spostato il blocco di script sopra il modulo nel caso in cui l'ordine della dichiarazione funzione di script era rilevante (non è).

Lo script funziona perfettamente in Firefox e Chrome, ma in IE 9 (con o senza vista di compatibilità su), ottengo questo errore:

SCRIPT5007: The value of the property 'googleMapsQuery' is null or undefined, not a Function object

ho studiato ambito JavaScript, e io non riesco a capire qualsiasi motivo perché IE pensa che "googleMapsQuery" sia una proprietà e perché non è definita. È una funzione e l'ho definita!

+2

il corpo è un posto perfetto per la scrittura, nella parte inferiore del corpo è in realtà preferito :) –

+0

I tag di script nell'HEAD vengono elaborati in modo sincrono (in serie) prima dell'elaborazione del corpo. I tag script nel corpo vengono caricati in modo asincrono, insieme ad altri script e al resto dei nodi DOM ... Non uso il tag

risposta

11

Ho trovato la risposta e, nonostante ciò che ho segnalato, NON era specifico del browser. Il bug era nel mio codice funzione e si sarebbe verificato in qualsiasi browser. Si riduce a questo. Nel mio codice avevo due righe che erano specifiche per FireFox/FireBug. Hanno usato console.log. In IE, hanno generato un errore, quindi li ho commentati (o almeno così pensavo). Ho fatto un lavoro schifoso commentandoli e ho rotto il bracketing nella mia funzione.

codice originale (con console.log in esso):

if (sxti.length <= 50) console.log('sxti=' + sxti); 
if (sxph.length <= 50) console.log('sxph=' + sxph); 

rotto Codice (tra parentesi fuori luogo all'interno di commento):

if (sxti.length <= 50) { //console.log('sxti=' + sxti); } 
if (sxph.length <= 50) { //console.log('sxph=' + sxph); } 

Codice Fisso (staffe fisse commenti esterni):

if (sxti.length <= 50) { }//console.log('sxti=' + sxti); 
if (sxph.length <= 50) { }//console.log('sxph=' + sxph); 

Quindi, era la mia codifica sciatta. La funzione in realtà non è stata definita, perché un errore di sintassi ha impedito la chiusura.

Oh bene, vivi e impara. ;)

2

Hai provato ad aggiungere il punto e virgola a onclick="googleMapsQuery(422111);". Non ho abbastanza del tuo codice per verificare se il punto e virgola mancante causerebbe l'errore, ma cioè è più schizzinoso sulla sintassi.

+0

Non era il punto e virgola. La funzione era davvero indefinita a causa di commenti e bracketing sciatti da parte mia. Un vero errore di sintassi che impediva al mio script di compilare anche se fosse codice eseguibile. ;) – chriv

0

Solo pochi minuti fa stavo affrontando lo stesso problema. Ho avuto il problema dopo aver appena posizionato jQuery per avviare l'altro script di jQuery. Dopotutto funzionerà benissimo.

+8

Questa risposta non ha senso per me. –

17

Stavo riscontrando un problema simile con una proprietà null o non definita.

Questo significa che la modalità documento di IE era in default per gli standard IE7.Ciò è dovuto al fatto che la modalità di compatibilità viene impostata automaticamente per tutti i siti Intranet (Strumenti>Impostazione visualizzazione Compatibilità>Visualizzazione siti Intranet in Visualizzazione Compatibilità).

+2

Questo mi ha aiutato in maniera massiccia: questa pagina è stata la prima hit per una ricerca su Google di "Il valore della proprietà è nullo o indefinito, non un oggetto funzione", e questa era la soluzione di cui avevo bisogno. Quindi grazie! – benshepherd

0

Quindi ho avuto una situazione simile con lo stesso errore. Ho dimenticato di aver cambiato la modalità di compatibilità sulla mia macchina dev e avevo anche un comando console.log nel mio javascript. Ho cambiato la modalità di compatibilità in IE e rimosso il comando console.log. Non più problema.