2011-11-06 247 views
2

我想在用戶點擊div時執行操作。但是,如果他點擊div內的鏈接,我想直接發送給他鏈接。現在href被忽略了。jquery點擊事件 -

<div id=myDiv> 

    some text 
    <a href="link1">my link</a> 

    some text 
    <a href="link2">my link</a> 

    some text 
    <a href="link3">my link</a> 
<div> 


$('.myDiv').live('click', function() {   
     console.log($(this)); 
     // if clicked on link, the go directly to the link 
     .... 
     // if clicked elsewhere on div, then perform another another action and return false 
     return false; 

    }); 

======我的解決方案====

我喜歡Rob的解決方案,但語法是有點傷腦筋,所以RTFM與類似的東西爲我的作品上來。

$('.myDiv').live('click', function(event) {   
    var $target = $(event.target); 
    if($target.is("a")) { 
    return true; 
    } 
    else{ 
     // do something else 
     return false; 
    } 
}); 
+1

如果你'返回true,會發生什麼;'? – James

+0

這樣做...在做其他事情後執行href,但寧願直接去鏈接。 –

回答

1

查看event.target屬性。下面的代碼在點擊錨點時不執行return false。當鏈接被點擊

$('.myDiv').live('click', function(event) { 
    .... 
    // `return false` only if element != <a> 
    if(!$.nodeName(event.target, "a")) return false; 

}); 
+1

他不想要'if($。nodeName(e.target,「a」))返回true;''是在哪裏? – Hogan

+0

@Hogan他想跟隨鏈接。 'return false'阻止鏈接被跟蹤。我修改了自己的代碼,以便在當前目標是錨點時不會發生'return false',這與'return true'具有相同的效果。 –

+0

所以默認是返回true?我沒有看到你的代碼。 – Hogan

1

呼叫stopPropagation()

$('.myDiv').live('click', function(e) { 
    // Perform your action here 
}); 

$('.myDiv a').live('click', function(e) { 
    e.stopPropagation(); 
}); 
+0

這不是他想要的 - 他阻止了一個工作鏈接,他希望鏈接工作。 – Hogan

+0

@Hogan:Nope - 'stopPropagation()'不是'preventDefault()'。 http://jsfiddle.net/8sfdQ/(嘿嘿...這個例子不起作用,因爲iframes的交叉來源規則。Oops:P如果你去/顯示/它確實。) – Ryan

+0

很好 - 謝謝。 – Hogan