2013-10-03 25 views
1

下面是HTML:不火,如果元素是class「負荷」或兒童包含「.delete」

<ul> 
    <li>This should fire</li> 
    <li>This should not fire, but does <div class="delete">Delete</div></li> 
    <li class="load">This does not fire as expected</li> 
</ul> 

這裏是jQuery的

$('ul').on('click', 'li:not(.load):not(:has(.delete))', function() { 
    alert('fire'); 
}); 

任何想法如何,我可以預防jQuery的發射時,李有一個子類.delete的子元素?

+3

這個問題似乎是題外話,因爲它是關於一個錯字。 – undefined

+1

這是有效的。我將它複製並粘貼到jsFiddle中,並且沒有任何更改。 – Archer

+0

它確實有效......我不知道我之前爲什麼會遇到問題。剛纔編輯的 – kylex

回答

2

工作正常,我(fiddle)。也就是說,你用另一個開頭li標籤而不是結束標籤......所以,你會得到一個意外的列表項。

<ul> 
    <li>This should fire</li> 
    <li>This should not fire, but does<div class="delete">Delete</div></li> 
    <li class="load">This does not fire (as expected)</li> 
</ul>
+0

你是對的...它工作。我不知道爲什麼我不能提前工作。 HM。 – kylex

0

試試下面的代碼:

$('ul').on('click', 'li', function() { 
    var currentLi = $(this); 
    if(currentLi.find('.delete').length == 0 && !currentLi.hasClass('load')) { 
     alert('fire'); 
     return false; 
    } 
}); 
+0

。現在試試。 – Rajesh

+0

是。緩存jquery對象 – Rajesh

0

這樣的:

$('li:not(.load):not(:has(.delete))').on('click', function() {  
    alert('fire'); 
}); 
+1

這不會根據需要排除'.load'。 – canon

+0

你爲什麼投票下來? 這正是他所要求的。 '我怎麼可以防止jQuery從李時有一個孩子元素與類.delete發射' – Dvir

+0

你錯過了':not(.load)'部分他的選擇器?或者他在標記中聲明不應該爲'.load'工作? – canon