2011-11-03 53 views
0

我有一個點擊綁定爲元素的直播。處理程序返回執行後假的,但如果元素恰好是一個一個標記,然後將鏈接也沒有得到遵守,這是不可接受的......jquery live在A標籤上返回false

$('*').live('click', function(){ 
    // lots of code here 
    return false; 
}); 

現在,如果被點擊的元素有一個路徑像A>img,並且圖像被點擊,A將永遠不會被跟蹤。我不希望點擊事件進一步傳播。

我該如何做到這一點?

編輯:

我的應用程序將事件綁定到*是至關重要的。此外,點擊可以在任何元素上進行,而不僅限於A。因此,上述解決方案都不適合我希望達到的目標。

+0

你的代碼返回false末所以沒有動作將被執行,你正在執行它到所有元素'*' – run

回答

0

我不會點擊功能綁定到*。你可以將它綁定到body元素;點擊將從被點擊的元素傳播到body元素。您可以查看最初點擊這樣的元素:

$("body").live("click", function (e) { 
    if ($(e.originalEvent.target).is("a")) { 
     return false; 
    } 
}); 

說了這麼多,你還可以這樣做:

$("*").live("click", function() { 
    if ($(this).is("a") == false) { 
     return false; 
    } 
}); 
0

嘗試:

if($(this).tagName == 'A') 
    return true; // perhaps even { do nothing } 
else 
    return false; 

這可能不是確切的代碼來獲得標記名,看到這個How to extend jQuery to make it easier to retrieve the tagName

也看到這一點:http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/

+1

this.tagName或this.nodeName將足夠 – jerjer

+0

請參閱「所以你真的想要什麼?」下的stopPropagation()小節。在我放在那裏的第二個環節。我認爲這可能是你正在尋找的東西,但正如Bryan Ross所說,你可能不想附加到每個DOM對象上。謝謝你清理那個,jerjer。 –

2

你在找什麼是preventDefault()

$('*').live('click', function(e){ 
    // lots of code here 
    e.preventDefault(); 
    return false; // Don't think this is necessary 
}); 

我還想說一個事件附加到所有元素可能不是一個好主意。

你會被連接到A標籤而得到更好的服務:

$('a').click(function(e){ 
    // lots of code here 
    e.preventDefault(); 
    return false; 
});