3

これに関するいくつかの質問を読んでいますが、問題の解決策が見つかりませんでした。以前に尋ねられたことを繰り返している場合は申し訳ありません。

コード内:

$("#menuZone").load("northMenu.jsp", function(response, status, xhr) {
                if (status == "error") {
                    var msg = "Error found: ";
                    alert(msg + xhr.status + " " + xhr.statusText);
                }else{
                    // hide admin menus
                    $('.admin').hide();
                }
            });

私がやろうとしているのは、「northMenu.jsp」から順序付けられていないリストをロードし、 class を持つ項目 (li タグ) を非表示にすることadminです。

上記のコードでは、 のアイテムclassは非表示にされていませんが、html完全に に完全に挿入されてい#menuZoneます。

その後、他の場所で関数を呼び出してそのアイテムを表示および非表示にすると、問題なく動作します。

jquery load docでは、「完全なコールバックが提供されている場合、後処理とHTML挿入が実行された後に実行されます」と書かれています。

したがって、問題は非同期の質問であってはなりません! それともできますか?

4

1 に答える 1

2

このフィドルは機能しているため、ブラウザの問題ではないようです。コードに何も改ざんされていないと仮定するとload()(合理的な仮定の IMHO)、考えられる説明は 2 つだけ残ります。

  1. $(".admin")AJAX リクエストからのマークアップにはclass属性が含まれておらず、これらの属性はコードによって行のどこかに追加されるため、何も一致しません。

  2. 要素は実際には隠されていますが、コードの別の部分によって直後に再び表示されます(質問のコメントで実行されている他のAJAXリクエストについて言及しました)。

したがって、次の呼び出しcompleteを追加して、コールバックをインストルメント化することをお勧めします。alert()

// Hide admin menus.
$(".admin").hide();
alert($(".admin").length);

次の 3 つの結果が考えられます。

  • これは、 (1) が true0あることを意味します。
  • アラートは より大きい数値を出力します0。その場合:
    • アラート ボックスを閉じずに、.admin要素が表示されているかどうかを確認し、
      • そうでない場合、(2) は trueです。
      • もしそうなら、私が考えられなかった何かが真実です.
于 2012-06-01T20:30:15.477 に答える