1. 程式人生 > >span、div、li 等獲取焦點問題

span、div、li 等獲取焦點問題

對於普通的div/span/li等元素節點是不能直接獲取焦點的,需要用到一個屬性tabindex

2、關於tabindex的科普

如果試圖觸發div標籤繫結的onfocus事件和onblur事件,需要為該標籤新增tabindex屬性。

tabindex屬性其實指定了點選計算機“Tab”鍵時游標移動的順序,在點選計算機“Tab”鍵時tabindex屬性值越小(最小為0)其所在的標籤越先得到焦點

<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8"
/>
<title>04</title> </head> <body> <input type="text" id="text1"> <input type="text" id="text2"> <input type="text" id="text3">      <div>按鈕</div> </body> </html>

執行上面的程式碼點選計算機“Tab”鍵,這是你會發現input控制元件獲取了焦點;input控制元件可以直接觸發onfocus事件和onblur事件,但div不行

<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title>test</title>
    </head>
    <body>
        <input type="text" id="text1" tabindex = "3">   
        <input type="text" id="text2" tabindex
= "2">
<input type="text" id="text3" tabindex = "1"> </body> </html>

執行上面的程式碼點選計算機“Tab”鍵,input會從右到左依次獲取焦點

<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title>test</title>
    </head>
    <body>
        <input type="text" id="text1" tabindex = "1">   
        <input type="text" id="text2" tabindex = "2">   
        <input type="text" id="text3" tabindex = "3">
    </body>
</html>

執行上面的程式碼點選計算機“Tab”鍵,input會從左到右依次獲取焦點

tabindex預設的會使用在以下元素(就是說預設可以獲取焦點的元素):A, AREA, LABEL, INPUT, SELECT, TEXTAREA, and BUTTON.這些元素不設定tabindex都可以獲取焦點,其他元素需要設定tabindex才能獲取到焦點,其中tabindex得知越小在tab鍵切換的時候就會首先聚焦

<html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <title>04</title>
    </head>
    <body>
        <input type="text" id="text1">   
        <input type="text" id="text2">   
        <input type="text" id="text3">
      <div tabindex="0">按鈕</div>
    </body>
</html>

執行上面的程式碼div就會獲取焦點,當開始的時候焦點在input裡面輸入的時候,當點選div,原input就會失焦而div也就獲取到了焦點,問題自然就解決了

獲取焦點的div在谷歌瀏覽器中會出現一個淺藍色的“框”,在IE瀏覽器中會出現一個由虛線構成的“框”,這個邊框大多數時候我們是不需要的,那麼怎麼解決這個問題呢?解決出現淺藍“框”只需要向div標籤的樣式表中新增“outline:0;”樣式即可,解決出現由虛線構成的“框”只需要向div標籤中新增“hidefocus=”true””屬性和屬性值即可;

程式碼7

<html>  
    <head>  
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />  
        <title>07</title>  
    </head>  
    <body>  
        <div tabindex="0" hidefocus="true" onfocus="javascript:alert('得到焦點!');" style="outline:0;"> </div>  
    </body>  
</html>  

說明:使用IE、火狐或Opera瀏覽器執行程式碼7的程式碼,讓div獲取焦點(通過滑鼠點選div域即可)你會發現出現了一個對話方塊,點選“確定”按鈕,該對話方塊取消,但是在谷歌或Safari瀏覽器執行程式碼7的程式碼,讓div獲取焦點(通過滑鼠點選div域即可)點擊出現的對話方塊中的“確定”按鈕,你會發現該對話方塊會一次又一次的出現,這不是我們想要看到的,為什麼會出現這種情況,怎麼解決這種情況呢?呵呵呵,我也正在為此而探索,但到現在也沒有找到一個有效的辦法,最後迫不得已使用了onclick事件 ,div支援onclick事件的而且不需要新增原本不屬於div的tabindex屬性。