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屬性。