1

jQuery.ajax() メソッドを使用していくつかのコードをロードしています。このコードでは、いくつかの jQuery-UI ウィジェット (スライダーとカレンダー) が必要ですが、IE には表示されません。

ここで、どこが間違っているのかを理解するのに役立つかもしれないコード例をいくつか示します。

jQuery-UI ウィジェットをロードするコード

<script>
jQuery(document).ready(function(){
  jQuery.ajax({
    type:'post',
    url: 'file.php',
    success: function (data) {
     jQuery('.somediv').empty().html(data); 
    }
  });
});
</script>

ロードされ、jQuery-UI ウィジェットを初期化する必要があるコード

<script>
jQuery(document).ready(function(){
  jQuery('.datepicker-div').datepicker(someoptions);
  jQuery('.slider-div').slider(someoptions);
});
</script>
<div class="datepicker-div">
<div class="slider-div">

非常に単純であることがわかります。FF では問題なく動作しますが、IE では動作しません。

おそらく、ドキュメント対応ステートメントとは何の関係もないのでしょうか?

4

3 に答える 3

3

成功イベントで初期化子を呼び出すだけです。

<script>
jQuery(document).ready(function(){
  jQuery.ajax({
    type:'post',
    url: 'file.php',
    success: function (data) {
      jQuery('.somediv').empty().html(data); 
      jQuery('.datepicker-div').datepicker(someoptions);
      jQuery('.slider-div').slider(someoptions);
    }
  });
});
</script>

もちろん、初期化用の関数を用意してリファクタリングする必要があります。

function Initialize(){
  jQuery('.datepicker-div').datepicker(someoptions);
  jQuery('.slider-div').slider(someoptions);
}

次に、成功とイベントを呼び出しますready()

<script>
jQuery(document).ready(function(){
  jQuery.ajax({
    type:'post',
    url: 'file.php',
    success: function (data) {
     jQuery('.somediv').empty().html(data); 
     Initialize();
    }
  });
});
</script>

アップデート

私はあなたの質問をより注意深く読みましたが、今では完全に理解しています。あなたready()はロードされたコードにあります。次に、jQuery を使用する必要がありますload()

スクリプトの実行

サフィックスのセレクター式のない URL を使用して .load() を呼び出すと、スクリプトが削除される前にコンテンツが .html() に渡されます。これにより、スクリプト ブロックが破棄される前に実行されます。ただし、セレクター式を URL に追加して .load() を呼び出すと、DOM が更新される前にスクリプトが削除されるため、スクリプトは実行されません。両方のケースの例を以下に示します。

ここで、ドキュメントの一部として #a に読み込まれた JavaScript はすべて正常に実行されます。

$('#a').load('article.html');

于 2012-05-17T15:30:56.357 に答える
0

問題を解決する方法がわかりませんでしたが、回避策が見つかりました。

回避策は非常に簡単です。IE を除くすべてのブラウザーで ajax を介したスクリプトの読み込みは正常に機能するため、IE を特定し、スクリプトを読み込まずに読み込みたいサイトにリダイレクトするように動作を変更する必要があります。私はこれをすべてJoomla 2.5で行っているため、少し作業が必要でしたが、基本的には次のコードで問題を解決しました。

// preparing the url
// check for ie
if (jQuery.browser.msie) {
  window.location(url);
} else {
  // do the ajax
}
于 2012-05-23T11:05:07.237 に答える
0

HTML を追加する前にスクリプトを削除してから、再度追加してみてください。

var outHTML = data.replace(/<script>/ig,"<div class='script'>").replace(/<\/script>/ig,"</div>");
outHTML = $(outHTML);
var script = outHTML.find("div.script").detach();
$(".somediv").html(outHTML);
var s = document.createElement("script");
s.textContent = script.text();
document.body.appendChild(s);

編集:

.find("div.script").filter("div.script")ajaxリクエストが返すものに基づいて変更する必要があるかもしれません。

于 2012-05-17T18:34:30.503 に答える