2012-12-17 35 views
0

阻止點擊事件我有以下代碼:從另一個click事件

$(function() { 
    $(li).click(doThis); 

    $(a.clickMe).live('click', doThat); 
}); 

而且我想點擊a.clickMe時遮擋doThis。 a.clickMe位於li的內部...我想查看點擊來源的來源,以便看看是否點擊了a.clickMe。

謝謝!

+0

riiiiiiigggghhhhttttttt ........ – Chanckjh

+0

爲什麼使用'.live()'? (我確定這裏是錯誤的東西,但我想知道是否希望它能幫助解決其他一些不需要的要求。) – nnnnnn

+0

必須使用live(),因爲頁面的其他部分使用ajax加載 – webwrks

回答

1

「我要檢查,看看點擊的來源是從哪裏來的」

好吧,或許是這樣的:

$(function() { 
    $("li").click(function(e) { 
     if ($(e.target).is("a.clickMe")) 
      return doThat.call(this, e); 
     else 
      return doThis.call(this, e); 
    }); 
}); 

也就是說,在li元素的點擊處理程序中測試event.target element是否爲"a.clickMe"元素之一,如果是,請調用doThat()(設置this並傳遞event對象)。否則請致電doThis()

+0

完美!我實際上使用if(!$(e.target).is(「a.clickMe」))...並且我仍然可以使用live(),這是我需要的b/c ajax使用 – webwrks

+1

請注意'$(「a。 ('click',doThat)''可以替換爲'$(document).on('click','a.clickMe',doThat)' - 它會有相同的效果,效率更高(因爲它避免了在綁定時間無意義地選擇所有'a.clickMe'元素)。更好的做法是使用'.on'的相同格式,但用'a.clickMe'元素的另一個元素替換'document'。 – nnnnnn

0

您可以阻止點擊事件從傳播到li

$(a.clickMe).live('click', function(e) { 
    e.stopPropagation(); 

    // Now, the event won't bubble up to the `li` and won't trigger its event handler. 
}); 
+0

可能想通過'.live()'把''on()'推向'。 – j08691

+1

您無法停止在'.live()'處理程序中傳播的事件,因爲它已經傳播。 – nnnnnn

+0

不幸@ j08691它不工作瓦特/生活,但好主意 – webwrks