2013-05-21 11 views
5

Il seguente funziona in tutti i browser tranne IE 9.0.8. Carica un modulo di sondaggio all'interno di div con una richiesta Ajax.JQuery non funziona in IE 9.0.8, ma funziona con gli strumenti dev aperti

$('.tab-content').on('click', '.show_survey_form', function(e) { 
    e.preventDefault() 
    target = $(this).attr("data-target") 
    my_href = $(this).attr("href") 
    console.log("load: " + target + " target: " + my_href) 
    // load: #survey_response_form_33 target: /surveys/33/survey_responses/edit_multiple 

    // Don't make a request unless the form is opening. 
    if ($(this).hasClass('collapsed')) { 
    console.log("Making request!") 
    //$(target).load(my_href) 
    $(this).html(closeSurveyForm) // Just changes the language on the button 
    } else { 
    $(this).html(respondToSurvey) // Just changes the language on the button 
    } 
} 

Il .load è commentato durante il debug. IE sembra avere un problema nell'uso di .hasClass in questo contesto. È usato altrove senza problemi.

La parte davvero strana è che nel momento in cui apro la finestra degli strumenti di sviluppo, inizia a funzionare. In modo coerente non funziona prima di allora, e funziona in modo coerente dopo aver colpito F12.

Altri problemi hanno detto che il metodo hasClass non funziona quando la classe contiene un \ r char ma non è il caso qui. Sto usando jQuery 1.8.3.

Aggiornamento: La modifica di href su "#" e la scrittura dell'URL nel caricamento dei dati non hanno avuto alcun effetto. Funziona ancora su tutti i browser tranne IE 9.0.8.

+0

Giusto per essere chiari, funziona in tutti i browser tranne IE9.0.8. Significa che funziona in altre versioni di IE9? Che dire di IE8 o IE10? È davvero così specifico per la versione che stai insinuando, o è solo che questa è la versione con cui stai provando? – Spudley

+0

Sarei disposto a scommettere che l'indizio è nel punto in cui dici "funziona non appena apro gli strumenti di sviluppo F12". Penso che questo sia un altro caso di vecchio problema di 'console.log' non funzionante fino all'apertura di F12. Vedi [questa domanda per una risposta completa] (http://stackoverflow.com/questions/7742781/why-javascript-only-works-after-opening-developer-tools-in-ie-once/7742862#7742862) – Spudley

+0

It funziona in IE8 e IE 10. Non ho testato con altre versioni di IE9. – Archonic

risposta

12

Questo non ha nulla a che fare con jQuery o hasClass(). Dipende interamente dal tuo uso di console.log().

È importante sapere che IE non definisce l'oggetto console finché non è stata aperta la finestra degli strumenti di sviluppo F12.

Ciò significa che prima di aprirlo, le chiamate console genereranno errori javascript "oggetto non definito". Questo farà sembrare che il codice attorno ad esso non funzioni, ma in realtà è solo il fatto che manchi l'oggetto della console.

È possibile che si abbiano effetti simili in altri browser più vecchi, ma la maggior parte delle versioni attuali del browser non esegue questa operazione: definiscono immediatamente l'oggetto console, indipendentemente dal fatto che gli strumenti di sviluppo siano aperti o meno. IE è l'unica eccezione.

È possibile aggirare il problema (a) non si utilizza console se non si è in realtà il debug e avere gli strumenti dev aperti, o (b) l'aggiunta di un if(console) di controllo per tutte le chiamate console. Ciò impedirà l'errore.

Ulteriori informazioni qui: Why does JavaScript only work after opening developer tools in IE once?

+0

Grazie per questa spiegazione, mi ha aiutato anche io :) – Kyle