2012-07-04 40 views
13

我使用。對()函數的語法:JQuery的使用。對()與未選擇器

$(".schemaTab").on("click", ".schema", function() {}) 

,而不是.live()因爲我動態地添加.schema的div。這些div有這樣的代碼:

<div class="schema" id="SCH_16"> 
    <img src="Img/btnRemove.png" class="ikona SCH_Remove" alt="Smazat" title="Smazat"> 
</div> 

但我需要排除從其父DIV的click事件的IMG,所以任何想法怎麼辦呢?

我想:

$(".schemaTab").not(".SCH_Remove").on("click", ".schema", function() {}) 

...但它沒有工作,我不知道如何添加.not().on()代碼

回答

16

。不是()將無法工作,因爲on方法將事件處理器的當前選擇集jQuery對象中的元素,並使用原來的選擇測試該事件是否適用。

所以我認爲選擇,然後在你的情況下過濾將有所斬獲。

API:http://api.jquery.com/on/

你可以試試這個:

$(".schemaTab").on("click", ".schema", function (e) { 

    if (!$(e.target).is(".schemaTab")) { 
     // not stuff in here 
    } 

}); 
+0

'this'將始終綁定到被檢查的元素;我認爲你的意思是'e.target'。 – Ryan

+0

@minitech啊感謝和++ 1爲您的帖子上面,歡呼聲':)' –

3

內做整點這是處理尚未在DOM中的元素上的事件,其中包括您的.sch_Remove。

$(".schemaTab").on("click", ".schema", function() {}) 

爲了防止被點擊時,IMG被觸發父點擊動作,添加以下(除了上面的功能)。

$(".schemaTab").on("click", ".SCH_Remove", function() { return false; }) 

這將防止「點擊」事件傳播到父和觸發它的onclick方法,防止默認點擊行爲。

+0

儘管如此,因爲img是你div中唯一的東西,所以這兩行代碼本質上相互抵消了。我假設你會添加其他東西?否則您可能需要重新考慮您的方法 – nbrooks

4

只要確保目標一致:

$('.schemaTab').on('click', '.schema', function(e) { 
    if(!$(e.target).is('.schema')) { 
     return; 
    } 

    // Do stuff 
}); 
3

我只是碰到了這個問題,並且使用的:不selecter,就像這樣:

$('.schemaTab').on('click', '.schema:not(.booga)', function(event) { 

//樂趣發生在這裏 });

我正在使用jQuery 1.11.0,我不知道這個工作有多遠。

+0

這似乎回答了這個問題 –