2017-02-20 51 views
2

我有這樣的功能:

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()開始的目標,並期待

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

不......長度是屬性而不是方法 – 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

我不能真正理解這個功能的好處。 我可以想象你可以通過使用e.currentTarget而不是e.target來解決問題,當你不把事件綁定到document.documentElement。它綁定到你的目標,在這種情況下,我覺得應該是$('ul#menu-navigation > li.menu-item')

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

有了這個解決方案,你知道這是你想要的元素,你減少開銷,因爲你不傾聽每一位克利克某處你的文件。

+0

@Parvez Rahaman謝謝:)打字太快 – fGeyer