0

にクリック イベントをバインドしますdocument。id の div がありparentます。クリックイベントが発生するたびにdocument、ターゲット要素が子であるdiv ( id = parent )かどうかを確認しようとしています。

   <div id="parent">
    <div id="c1">
     <div id="gc1">
     </div>
     <div id="gc2">
     </div>
     ...
    </div>
    ...
   </div>

この目的のために、次のjqueryコードを書きました:

$(document).click( function(e) {
     if($(e.target).parents("#parent").length > 0)  //this condition is not 
                                                      working as expected
     { }
});

ここで何が間違っていますか?

4

3 に答える 3

1

jQuery.contains()を使用できます

if( $.contains( document.getElementById('parent'), e.target) ) {

}

これにより、ターゲットがコンテナー内に含まれているかどうかがチェックされます。

ドキュメントから:

注: 最初の引数は、jQuery オブジェクトやプレーンな JavaScript オブジェクトではなく、DOM 要素である必要があります。

これが getElementById の理由です。

于 2012-11-16T14:08:44.110 に答える
1

e投稿したコードが逐語的である場合は、コールバック関数へのパラメーターとして宣言するのを忘れています。

それとは別に、コードは正常に動作するはずです。ただし、要素のチェーン全体ではなく、0 または 1 つの要素のみが返されるため、効率を高めるために、.closest()代わりに使用できます。.parents()

于 2012-11-16T14:04:22.640 に答える
0

EDIT Use closest... Working FIDDLE

First...this may not completely answer your question but you need the (e) in the click function.

$(document).click( function(e) {
 if($(e.target).closest("#parent").length > 0) 
 { }
});
于 2012-11-16T14:05:39.480 に答える