2013-05-21 5 views
5

以下はIE 9.0.8を除くすべてのブラウザで動作します。 Ajaxリクエストでdiv内にアンケートフォームを読み込みます。JQueryはIE 9.0.8では動作しませんが、devツールを開いて動作します

$('.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を「#」に変更してデータロードに書き込むことは効果がありませんでした。 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

It IE8とIE 10で動作します。IE9の他のバージョンではテストしていません。 – Archonic

答えて

12

これはjQueryまたはhasClass()とは関係ありません。それはあなたの使用に完全にダウンconsole.log()です。

F12開発ツールウィンドウが開かれるまでIEはconsoleオブジェクトを定義していないことを知っておくことが重要です。

これは、開く前に、consoleの呼び出しでjavascriptの "object undefined"エラーがスローされることを意味します。これにより、そのコードが動作していないように見えるようになりますが、実際にコンソールオブジェクトが欠落しているだけです。

他の古いブラウザでも同様の効果がありますが、最新のブラウザのバージョンではこれが行われません。開発ツールが開いているかどうかに関係なく、すぐにconsoleオブジェクトが定義されます。 IEは唯一の例外です。

あなたが実際にデバッグとオープンのdevのツールを持っている、または(b)すべてのconsole呼び出しにif(console)チェックを追加している場合を除きあなたは、(a)はconsoleを使用していないのいずれかでこの問題を回避することができます。これにより、エラーを防ぐことができます。

ここに詳しい情報:Why does JavaScript only work after opening developer tools in IE once?

+0

この説明をいただきありがとうございます。 – Kyle

関連する問題