5

以下は、IE 9.0.8 を除くすべてのブラウザーで機能します。ajax リクエストを使用して、div 内にアンケート フォームを読み込みます。

$('.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 文字が含まれている場合、hasClass メソッドが機能しないと述べていますが、ここではそうではありません。jQuery 1.8.3 を使用しています。

更新: href を「#」に変更し、URL を data-load に書き込んでも効果はありませんでした。IE 9.0.8 を除くすべてのブラウザーで引き続き動作します。

4

1 に答える 1

12

これは jQuery やhasClass(). それはあなたの使い方次第ですconsole.log()

consoleF12 開発ツール ウィンドウが開かれるまで、IE はオブジェクトを定義しないことに注意してください。

これは、それを開く前に、console呼び出しが javascript の「オブジェクト未定義」エラーをスローすることを意味します。これにより、その周りのコードが機能していないように見えますが、実際にはコンソール オブジェクトが欠落しているという事実にすぎません。

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

これを回避するには、(a)console実際にデバッグして開発ツールを開いていない限り使用しないか、(b)if(console)すべての呼び出しにチェックを追加しますconsole。これにより、エラーが防止されます。

詳細はこちら: IE で開発者ツールを 1 回開いた後にのみ JavaScript が機能するのはなぜですか?

于 2013-05-21T20:16:49.393 に答える