2017-02-20 1 views
2

をターゲット:どのように私はチェック if文を作るのですか

jQuery(document.documentElement).on('click touch', function(e) { 
    // check if $(e.target) matches with $('ul#menu-navigation > li.menu-item') 
    // or any child elements within this particular div. 
}); 

をもしe.target$('ul#menu-navigation > li.menu-item')と一致またはこの特定の内のいずれかの子要素div。例えば

、のようなもの:このような

if ($(e.target) == $('ul#menu-navigation > li.menu-item')) { 
    // user clicked on this div or any child divs within this element 
} else { 
    // user clicked anywhere outside of this div 
} 
+1

を検索するには? – Cruiser

+0

あなたは['is()'](http://api.jquery.com/is/)メソッドをお探しですか? –

+1

イベントの委任をお探しですか? 'jQuery(document.documentElement).on( 'click touch'、 '#menu-navigation> .menu-item'、function(e){...})'? – Ryan

答えて

2

使用closest()がターゲットで開始し、あなただけの1つの要素にクリックイベントを装着していない理由を

jQuery(document).on('click touch', function(e) { 
    if($(e.target).closest('ul#menu-navigation > li.menu-item').length){ 
     // is within a menu item 
    } 
}); 
+0

これは本当に巧妙な解決策です! –

+0

これは素敵です。ありがとうございました!それは '.length()'ではないはずですが? –

+0

いいえ... 'length'はメソッドではないプロパティです – charlietfl

1

使用jQuery.is

if ($(e.target).is('ul#menu-navigation *')) { 
    // user clicked on this div or any child divs within this element 
} else { 
    // user clicked anywhere outside of this div 
} 

そして、あなたは唯一のul#menu-navigation > li.menu-itemli.menu-item使用の子供このセレクタを含めたい場合:'ul#menu-navigation > li.menu-item, ul#menu-navigation > li.menu-item *'

+0

はい完全に正しい –

+1

しかし、もしあなたが例えば: 'ul#menu-navigation> li.menu-item> .random-child'のような子要素をクリックすると、* if * –

+0

@HenrikPettersonは直接子供表記を使用しません。アップデートを見てください!これは子孫のどの要素でも機能します。 –

1

試してみてくださいif ($(e.target).is('ul#menu-navigation > li.menu-item'))

これは、要素が一致するかどうかを尋ねます。

jQuery(document.documentElement).on('click touch', function(e) { 
 
    if ($(e.target).is('ul#menu-navigation > li.menu-item')) { 
 
    // user clicked on this div or any child divs within this element 
 
    alert("I clicked on LI") 
 
    } else { 
 
    // user clicked anywhere outside of this div 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id="menu-navigation"> 
 
    <li class="menu-item">Home</li> 
 
    <li class="menu-item">About</li> 
 
</ul>

+2

しかし、ユーザーが 'ul#menu-navigation> li.menu-item> .random-child'のような子要素をクリックした場合、この* if *文は動作しますか? –

0

私は本当にこの機能の利点を理解することはできません。 イベントをdocument.documentElementにバインドしないと、e.targetの代わりにe.currentTargetを使用して問題を解決できると思います。あなたのターゲットにバインドし、私が思うに、この場合には、それはこのソリューションを$('ul#menu-navigation > li.menu-item')

$('ul#menu-navigation > li.menu-item').on('click', function (event) { 
    var $target = $(event.currentTarget); 
}) 

をする必要があり、あなたはそれが何をしたい要素である知っている、あなたはすべてのklickに耳を傾けるいけないので、あなたはどこか、オーバーヘッドを削減しますあなたの文書

+0

@Parvez Rahamanありがとう:)あまりにも速い入力でした – fGeyer

関連する問題