2012-09-13 72 views
6

因此,我通過CSS添加了一些懸停效果的列表。 HTML:如何在禁用點擊時保持懸停屬性

<li><a href="#">Current Period</a> 
    <ul> 
     <li><a href="#">2012</a> 
     <li> a href="#">2011</a> //...you get the point 

CSS:

#nav a:hover { 
    background-color: #fff; 
    color: #333; 
} 

當用戶在本期懸停的子元素出現(2012年,2011 ......它們有自己的孩子)的列表。我的問題是用戶可以點擊「當前期間」。有我設法通過添加類錨像這樣除去點擊:

<li><a href="#" class="noclick">Current Period</a> .... 

CSS:

.noclick { pointer-events: none; cursor: default; }

但本課程的刪除懸停功能。我想保持懸停效果,同時使按鈕不可點擊(我在想JavaScript,但我想要一個更直接的解決方案)。我感謝任何幫助:)

回答

1

在點擊處理機測試點擊的項目是否有類:

$("#nav a").click(function(e){ 
    if ($(e.target).hasClass("noclick")) 
     return false; 

    // your other code here 
}); 

請注意,通過測試事件target element,您不會再阻止c舔從工作的子元素。

或者如果「noclick」類沒有動態改變,即,那些「noclick」鏈接開始作爲而且將永遠是「noclick」,你可以改變選擇讓你的點擊處理未綁定到這些特定元素:

$("#nav a").not(".noclick").click(function() { ... 
+0

上點擊的第一段代碼,使後臺功能完美的感覺,併爲我的目的,完美符合法案。謝謝!我感謝您的幫助 :) – Jose

2

你試過了嗎?

$('.noclick').unbind('click'); 

$('.noclick').click(function(e){e.preventDefault();}); 

<a href="javascript:void(0);">Text</a> 
+0

我已經嘗試了所有他們三個,但點擊仍然被javascript函數識別。有一種感覺答案在這裏,但我做錯了什麼 – Jose

+1

我注意到另一個答案的評論,你說你有另一個函數捕獲點擊。有謊言你的問題..衝突的功能。請注意,我沒有上下文來描述如何捕獲當前的點擊,但假設你使用jquery它可能是'$('a')。click(function(){// stuff});'這意味着你要努力一些邏輯到其他的功能,多數民衆贊成在全球範圍內捕捉點擊,看看是否你的鏈接上點擊'hasClass(「noclick」)',如果你想要做什麼不要做的事。 – chris

+0

這很有道理。謝謝你,我會嘗試,現在 – Jose

0

您可以使用noClick類,以防止默認事件

('.noclick').on('click' , function(e) { 
    e.preventDefault(); 
}); 
+0

這將禁用我的其他功能(該功能檢查,看看是否被點擊一個子元素) – Jose

1

只要改變你的下面一行:

<li><a href="#" class="noclick">Current Period</a> .... 

這一個

<li><a href="#" class="noclick" onclick="return false;">Current Period</a> .... 

,改變你的下面的CSS:

.noclick { pointer-events: none; cursor: default; } 

這一個

.noclick { cursor: default; } 

應該做你想做的。

+0

我有一個至今仍在識別目標 – Jose

0

上.noclick類中刪除指針事件

.noclick { cursor: default; } 

,並添加JS來.noclick元素

$('.noclick').each(function() { 
    var $this = $(this); 
    $this.hover(function() { 
     // do something... 
    }); 
    $this.click(function() { 
     return false; 
    }); 
});