0

次のコードを実行すると、a 要素が div 要素内にあるため、予想どおり 1 が返されます。

HTML:

<div class=".holder">
  <a href="#" class=".link">a</a>
</div>

jQuery:

$(document).click(function (e) {
  alert($(e.target).closest(".holder").length);
});

ここで、a 要素自体を含む div 要素を再設定する必要がある a 要素の内部では、次のようになります。

$(".link").on("click", function (e) {
  e.preventDefault();
  $(".holder").html("some html");
});

問題は、ドキュメントのクリックが a 要素のクリックの後に発生するため (理にかなっています、階層)、a 要素をクリックすると、1 ではなく 0 を取得します。これは、a 要素の親がもう存在しないためです。それ自体はメモリ内にのみ存在します。

要素のクリック自体をチェックせずにこれを解決する方法はありますか?

4

2 に答える 2

2

このアプローチを試すことができます

$(document).click(function (e) {
    if(e.target.className === 'link'){
        e.preventDefault();
        alert($(e.target).closest(".holder").length);
        $(".holder").html("some html");
    }
});

ドキュメントのクリックイベントを作成し、現在のターゲットが何であるかを確認できます.リンクの場合は、必要なものを処理するコードを記述します..

また、ドットを削除します。 あなたのクラス名で class="link"

デモをチェック

于 2012-10-01T22:33:15.287 に答える
1

HTML 置換を延期できます。

$(document).click(function (e) {
  alert($(e.target).closest(".holder").length);
  if( $('.holder').data('executeMe') )
    $('.holder').data('executeMe')();
});

$(".link").on("click", function (e) {
  e.preventDefault();
    $('.holder').data( 'executeMe', function() {
      $(".holder").html("some html");
    });
});

</p>

于 2012-10-01T22:26:10.083 に答える