2011-05-18 82 views
2

底線:我想禁用(使用jQuery)某些元素無法對焦,而不是移除已應用的焦點。我的問題可能是IE-8特定的,所以我會考慮IE-8專注的解決方案。使元素無法對焦

例如,我有一個month-nav,有時幾個月有時候可能不是有效的選擇,但我仍然想要呈現這個月份。而不是搞亂我的服務器端邏輯,並通過切換到一個跨度,而不是一個鏈接,無效的一個月我的標記複雜,我只是增加一個「無效」級的李(鏈接容器)

<li class="valid"> 
    <a href="/subpubs/yearMonth/2011-1">Jan</a> 
</li>  

<li class="invalid"> 
    <a href="/subpubs/yearMonth/2011-2">Feb</a> 
</li> 

[etc.] 

這個jQuery的工作,關閉鏈接並移除焦點:

$('.invalid > a').click(function() { $(this).blur(); return false; }); 

但在IE8(雖然不是IE7,不知道IE9),由.blur()取消重點有足夠的延遲是有一個可見的眨眼(即使寂寞天的解決方案)。所以我想要另一種方法,或者只是修復IE8。

有沒有隻是禁用鏈接從根本上不能集中?

+3

僅從可用性的角度來看,隱藏無效鏈接會不會更好?有一個不可點擊的鏈接可能會導致你的訪問者很多困惑。 – 2011-05-18 08:56:00

+0

我同意上面的Rory - 就讓您的語義標記符合您的用戶體驗而言,不可點擊的鏈接是一個令人困惑的範例。另外,如果JS被關閉,你的鏈接仍然是可點擊的,這可能不是你想要的。在服務器上執行它真的很麻煩嗎? – 2011-05-18 09:14:48

+0

@Rory:我會發現有一個說的清單,8個月,有些在中間失蹤更令人困惑:「他們爲什麼失蹤?這是一個錯誤?」此外,隨着內容選項的變化,有些月份會轉變位置(壞)。比如說,11月份沒有文章,但後來增加了文章。相反,顯示不可用的月份有一個清晰的視覺指示器,表明它不可用,不可點擊,(不*看*就像一個鏈接)清楚地表明沒有與該月相關的內容。使用link * tags *進行這項工作就是找到一個最容易實現的通用解決方案。 – Faust 2011-05-18 09:53:34

回答

1

你可以考慮切換所有的無效鏈接,使用jQuery來標記標記;這將是客戶端而不是服務器端。從這些鏈接中刪除重點是否有特殊原因?如果他們實際上並沒有鏈接到任何有用的東西,那麼服務器端應該用替換隻有文本的鏈接?

+0

我更喜歡簡單的jQuery解決方案,不需要標記更改,因爲用跨度替換鏈接會強制我的標記,選擇器和樣式更加複雜;我發現自己一直在做這些導航小部件;我努力保持我的服務器端代碼也很簡單,所以我真的很想磨練一個非常簡單的jQuery解決方案。 – Faust 2011-05-18 09:07:16

2

延遲可能是在構建jQuery對象。如果調用本地方法blur你可以這樣做更快:

$('.invalid > a').click(function() { this.blur(); return false; }); 

雖然我想你或許應該focus做到這一點,而不是,讓用戶無法標籤他們的方式到你的元素:

$('.invalid > a').focus(function() { this.blur(); return false; }); 

另一種選擇是使用,以取代span元素所有的「無效」鏈接的jQuery:

$('.invalid > a').replaceWith(function() { 
    return $('<span/>', { 
     html: this.innerHTML, 
     'class': 'disabled-link' 
    }); 
}); 
+0

它仍然在IE8中閃爍。滑稽:我只是注意到我對IE7的錯誤 - 沒有閃爍(至少IE8 /兼容模式)。我將修改我的問題,將其作爲IE-8特定問題詳細說明。 – Faust 2011-05-18 08:59:20

2

我曾經遇到過同樣的問題,我發現的最佳解決方案是將元素的「tabindex」屬性設置爲「-1」。例如:

$('.invalid > a').attr('tabindex','-1');