2013-05-21 14 views
5

Następujące działa we wszystkich przeglądarkach z wyjątkiem IE 9.0.8. Ładuje formularz ankiety w div z prośbą o ajax.JQuery nie działa w IE 9.0.8, ale działa z narzędziami dev otwórz

$('.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 
    } 
} 

Funkcja .load jest komentowana podczas debugowania. IE wydaje się mieć problem z użyciem .hasClass w tym kontekście. Jest używany gdzie indziej bez problemu.

Naprawdę dziwne jest to, że od momentu otwarcia okna narzędzi programistycznych, zaczyna działać. Konsekwentnie nie działa wcześniej i konsekwentnie działa po naciśnięciu F12.

Inne problemy powiedziały, że metoda hasClass nie działa, gdy klasa zawiera znak \ r char, ale tak nie jest w tym przypadku. Używam jQuery 1.8.3.

Aktualizacja: Zmiana href na "#" i zapisanie adresu URL w ładowaniu danych nie przyniosło skutku. Nadal działa we wszystkich przeglądarkach oprócz IE 9.0.8.

+0

prostu być jasne, że działa we wszystkich przeglądarkach z wyjątkiem IE9.0.8. Czy to oznacza, że ​​działa w innych wersjach IE9? A co z IE8 lub IE10? Czy to naprawdę jest specyficzne dla wersji, jak sugerujesz, czy jest to tylko wersja, z którą ją testujesz? – Spudley

+0

Byłbym skłonny założyć się, że wskazówka jest w tym punkcie, w którym mówisz "działa, gdy tylko otworzę narzędzia programisty F12". Myślę, że jest to kolejny przypadek starego wydania 'console.log' nie działa dopóki F12 nie zostanie otwarte. Zobacz [to pytanie, aby uzyskać pełną odpowiedź] (http://stackoverflow.com/questions/7742781/why-javascript-only-works--2-opening-developer-tools-in-ie-once/7742862#7742862) – Spudley

+0

To działa w IE8 i IE 10. Nie testowałem z innymi wersjami IE9. – Archonic

Odpowiedz

12

Nie ma to nic wspólnego z jQuery lub hasClass(). Całkowicie zależy od tego, czy używasz console.log().

Ważne jest, aby wiedzieć, że IE nie definiuje obiektu console, dopóki okno narzędzi deweloperów F12 nie zostanie otwarte.

Oznacza to, że przed jego otwarciem, wywołania console będą rzucać błędy "obiektów niezdefiniowanych" javascript. To sprawi, że okaże się, że kod dookoła niego nie działa, ale tak naprawdę jest to po prostu brak obiektu konsoli.

Możesz mieć podobne efekty w innych starszych przeglądarkach, ale większość obecnych wersji przeglądarek tego nie robi - natychmiast definiują obiekt console, niezależnie od tego, czy narzędzia programistyczne są otwarte, czy nie. IE jest jedynym wyjątkiem.

Można to obejść albo (a) nie używając console chyba że faktycznie debugowania i mieć narzędzia dev otwarte, lub (b) dodanie if(console) czek wszystkich połączeń console. Pozwoli to uniknąć błędu.

Więcej informacji tutaj: Why does JavaScript only work after opening developer tools in IE once?

+0

Dzięki za wyjaśnienie, pomogło mi to również :) – Kyle