2011-02-01 177 views
1

由於缺乏編程技巧,我寫了一個if語句有問題。JavaScript IF語句問題

有代碼:

$("div.footerMenu li div.onScreen").click( 
    function(e) { e.stopPropagation(); e.preventDefault(); return false; } 
); 

這裏面div我有簡單的<a></a>鏈接。問題是,當我點擊該鏈接時,沒有任何反應。如果.click的目標是<a></a>標記,我試圖創建一個函數,該函數不會執行function(e)。有沒有簡單的方法來做到這一點?

+2

只要你知道,該解決方案`回報FALSE`是一樣的做既` e.stopPropagation`和`e.preventDefault`。 – 2011-02-01 12:27:55

+0

@Jonathon Bolster:我同意。但是,這也適用於使用代表團時冒泡嗎? – xzyfer 2011-02-01 12:33:20

回答

2

你問題在於,因爲你的鏈接是在div內,你的代碼阻止了click事件,因此爲什麼沒有發生。你可以試試這個:

$("div.footerMenu li div.onScreen").click(function(e) { 
    if(e.target.tagName.toLowerCase() != 'a') { 
     e.stopPropagation(); 
     e.preventDefault(); 
     return false; 
    } 
}); 

我使用.toLowerCase(),因爲我不是100%的標記名將始終在所有瀏覽器是大寫。只是一個健全的檢查。

+0

謝謝!這工作得很好! :) – Szymon 2011-02-01 12:29:24

0

是啊,很容易

if (e.target.nodeName !== "A") { 
    // your code here 
} 
0

您需要檢查節點的tagName == 'A'

if (this.tagName == 'A') 

「這個」 應參照被點擊的節點,否則查找e.target或e.targetSrc(不知道jQuery的等價物)

0

當你點擊一個元素時,只有它會運行的事件。但不是在父元素上傳播的事件。 您需要更改選擇器以匹配所有子元素。

$( 「div.footerMenu李div.onScreen> *」) $( 「div.footerMenu李div.onScreen>一」)

0

而不是檢查,如果目標是一個a(對我來說,這是有點凌亂),我寧願將它分開並單獨處理鏈接。通過使用e.stopPropagation只有,您可以點擊鏈接並進行任何您想要的操作以及防止事件冒泡到div。

$("div").click(function(e){ 
    alert('You clicked me, I am the div!'); 
}); 

$("div a").click(function(e){ 
    // Allows the link to be clicked but prevents 
    // the event from bubbling up to the div 
    e.stopPropagation(); 
}); 

例子:http://jsfiddle.net/jonathon/s2TxS/

1

我有一個類似的問題,這裏要說的是工程:)

$("div.footerMenu li div.onScreen").click(function(e) { 
    if(!($(e.target).is('a'))) 
     e.stopPropagation(); e.preventDefault(); return false; 
    } 
);