2011年3月11日 星期五

asp.net_Menu控制項若要過無障礙A+請先測試再使用

手頭上的案子需要通過無障礙(A+等級)檢測,前天突然覺得檢測的時機到了,

跟同事要了FreeGo 3.1.1版,點擊兩下,輸入網址,按下開始....

第一次跑完,總計5000+個錯誤,先將一些alt標記上去後,還有3894個錯誤。

3894?什麼東西可以有3894個錯誤.....

看似很恐怖,仔細一看全部的原因都在一項,

「H209002 確保事件的啟發不要求一定得使用滑鼠」,這是什麼意思?

其實就是除了滑鼠以外要可以用鍵盤操作,他判斷的標準是:

1. 輸出的HTML內有onmousedown,就必須有onkeydown

2. 輸出的HTML內有onmouseup,就必須有onkeyup

3. 輸出的HTML內有onclick,就必須有onkeypress

3. 輸出的HTML內有onmouseover,就必須有onfocus

3. 輸出的HTML內有onmouseout,就必須有onblur

瞭解他的原因以後....真是對3894個錯誤完全沒有頭緒。

-------------------------------------------

找了一下資料發現,因為我的menu選單使用asp.net內建的menu控制項,

而Menu控制項在輸出到HTML時,會產生onmouseover、onmouseout、onkeyup三個事件,

所以必須要加入對應的三個事件才可以通過程式的檢測。

所以我當時的想法是:

1. 一定可以加入這些很一般的事情。

2. 如果不可以,我就用jquery把他加上去。

事實證明,我失敗了 XD

首先,第一個想法:

A. Menu控制項若用Attributes.add("onfocus","")的方式加入事件,只能加到最外層,也就是Menu自己,下面的子層不會改變。

B. 若是使用樣版的方式,雖然可以把類似menulist使用label等控制項取代掉,但去觀察產出的HTML,onmouseover等事件其實是加在tr裡面,所以即便在樣版的label上加了onfocus等事件,還是無用。

接下來,第二個想法:

A. jquery等javascript皆可以正確的將onfocus事件加上去,但是HTML一開始輸出後,即便利用JS動態的加上這些事件,操作起來也都有效果,但輸出的HTML並不會隨之改變,也就是說那些動態的東西,監測程式也無法監測到,所以無效。

所以本篇只有一個重點,就是你要過無障礙A+,而你有用ASPNET的Menu,經過我兩天的測試,我認為無法通過,所以後來只好選擇用jquery手工打造Menu了。(也可能可以,但是我沒找到方法)

沒有留言:

張貼留言