2013-05-21 33 views
5

以下工作適用於除IE 9.0.8以外的所有瀏覽器。它使用ajax請求在div內加載調查表單。JQuery不適用於IE 9.0.8,但可與開發工具一起使用

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

.load在調試過程中被註釋掉。 IE在這種情況下使用.hasClass似乎有問題。它在其他地方使用沒有問題。

真奇怪的是,當我打開開發工具窗口時,它開始工作。它在此之前一直不起作用,並且在擊中F12後始終如一地工作。

其他問題已經說過,當類包含一個\ r char時,hasClass方法不起作用,但這裏不是這種情況。我正在使用jQuery 1.8.3。

更新:將href更改爲「#」並將URL寫入數據加載沒有效果。除了IE 9.0.8之外,它仍然適用於所有瀏覽器。

+0

僅僅是明確的,它的工作原理除了IE9.0.8所有瀏覽器。這是否意味着它可以在IE9的其他版本中使用?那麼IE8或IE10呢?這是否與您所暗示的版本相關,還是僅僅是您正在測試的版本? – Spudley

+0

我願意打賭,線索是在你說「只要我打開開發工具F12就行」的位置。我認爲這是'console.log'舊的問題的另一種情況,直到F12打開時才工作。請參閱[這個問題的完整答案](http://stackoverflow.com/questions/7742781/why-javascript-only-works-after-opening-developer-tools-in-ie-once/7742862#7742862) – Spudley

+0

它在IE8和IE10中工作。我還沒有測試其他版本的IE9。 – Archonic

回答

12

這與jQuery或hasClass()無關。完全取決於您使用console.log()

重要的是要知道,在F12開發工具窗口打開之前,IE沒有定義對象console

這意味着在打開它之前,console調用將拋出javascript「object undefined」錯誤。這會使它看起來圍繞它的代碼不起作用,但事實上控制檯對象已丟失。

您可能在其他舊瀏覽器中有類似的效果,但大多數當前瀏覽器版本不這樣做 - 無論開發工具是否打開,他們立即定義console對象。 IE是唯一的例外。

你可以解決這個問題是(a)不使用console除非你實際上調試,並有開發者工具打開,或(b)將if(console)檢查所有console電話。這將防止錯誤。

這裏更多信息:Why does JavaScript only work after opening developer tools in IE once?

+0

感謝您的解釋,它也幫助我:) – Kyle

相關問題