6

DOM 挿入を使用して、いくつかのデータ入力ダイアログを生成しています。.html()一部のブラウザー、特にモバイル ブラウザーや IE-Mac では、おそらく変更された DOM がまだ準備されていないため、呼び出し直後の操作が起動しないことがわかりました。例えば:

$.ajax({
    type: "GET",
    url: url,
    dataType: 'html',
    success: function (data, textStatus, jqXHR) {
        $("#theDialog").html(data);

        // hide address
        $("#theDialog #BillingAddress").closest("li").hide();
        ...

これはほとんどの場合機能しますが、特定のブラウザでは、指定された を非表示にできないことがあります<li>。また、コンソールに移動するとブラウザーが DOM の挿入を完了できるように見え、コードをステップ実行するときに.hide() 常に機能するため、デバッグが困難でした。

私が求めているのは、メソッド$("#theDialog").on("ready")からのまたはコールバックのいずれかだと思います.html()。しかし、それらは存在しないようです。

考えてみた

  1. に切り替えますが、最終的には JSONP に変換しますが、それをサポートしている.load()とは思いませんか?.load()
  2. およびその他のDOM.hide()操作を、返されたデータ内のスクリプト タグに配置します。

#2が推奨されるアプローチだと思いますが、最初にここでサニティチェックを行いたいと思いました. 誰もこれを経験しましたか?

どうもありがとう。

4

3 に答える 3

1

私の以前の答えはうまくいきましたが、それはあなたのすべての問題を解決しませんでした。私は次のようなものをお勧めします:

var myDiv=document.createElement( 'div' );
myDiv.innerHTML=data;
// now do all of your initializing, passing in myDiv like $( myDiv )
$("#theDialog").html(myDiv.innerHTML)
  .find( '#BillingAddress' )
  .closest("li")
  .hide();

これがうまくいくことを願っています!

于 2013-02-26T15:16:27.677 に答える
0

それ以外の:

$("#theDialog").html(data);
// hide address
$("#theDialog #BillingAddress").closest("li").hide();

やってみました:

$("#theDialog").html(data).find( '#BillingAddress' ).closest("li").hide();

私はこれを自分で経験したことはありませんが、うまくいけばうまくいきます!

于 2013-02-25T05:39:41.447 に答える
-1

.promise()コールバック関数はありませんが、使用できます.done()

$('#selector').html(someText).promise().done(function(){
        //callback code
    });
于 2016-09-01T04:48:36.710 に答える