簡體   English   中英

如何將鍵盤焦點放在DIV上並將鍵盤事件處理程序附加到它?

[英]How can I give keyboard focus to a DIV and attach keyboard event handlers to it?

我正在構建一個應用程序,我希望能夠單擊由DIV表示的矩形,然后使用鍵盤通過列出鍵盤事件來移動該DIV。

而不是在文檔級別使用事件監聽器來處理那些鍵盤事件,我可以在DIV級別監聽鍵盤事件,也許是通過給予鍵盤焦點?

這是一個簡化的示例來說明問題:

<html>
<head>
</head>
<body>

<div id="outer" style="background-color:#eeeeee;padding:10px">
outer

   <div id="inner" style="background-color:#bbbbbb;width:50%;margin:10px;padding:10px;">
   want to be able to focus this element and pick up keypresses
   </div>
</div>

<script language="Javascript">

function onClick()
{
    document.getElementById('inner').innerHTML="clicked";
    document.getElementById('inner').focus();

}

//this handler is never called
function onKeypressDiv()
{
    document.getElementById('inner').innerHTML="keypress on div";
}

function onKeypressDoc()
{
    document.getElementById('inner').innerHTML="keypress on doc";
}

//install event handlers
document.getElementById('inner').addEventListener("click", onClick, false);
document.getElementById('inner').addEventListener("keypress", onKeypressDiv, false);
document.addEventListener("keypress", onKeypressDoc, false);

</script>

</body>
</html>

在單擊內部DIV時,我嘗試給它焦點,但隨后的鍵盤事件總是在文檔級別而不是我的DIV級別事件偵聽器中拾取。

我是否只需要實現特定於應用程序的鍵盤焦點概念?

我應該補充一下,我只需要在Firefox中使用它。

排序 - 我將tabindex屬性添加到目標DIV,這會導致它拾取鍵盤事件

<div id="inner" tabindex="0">
    this div can now have focus and recieve keyboard events
</div>

http://www.w3.org/WAI/GL/WCAG20/WD-WCAG20-TECHS/SCR29.html收集的信息

保羅的答案很好,但你也可以使用contentEditable,就像這樣......

document.getElementById('inner').contentEditable=true;
document.getElementById('inner').focus();

在某些情況下可能更可取。

將鍵盤焦點設置為<div></div><div id="text_translate"><p>我有以下代碼片段:</p><pre> &lt;div id="listbox1div" style="z-index:95; background:white; overflow-y:auto; overflow-x:hidden; width:240; height:314px;"&gt; &lt;a id="focusLink2"&gt;&lt;/a&gt; &lt;table id="ptObj_listbox1...</pre><p> 我有一個動態構建&lt;div&gt;元素的頁面(例如上面)。 這個&lt;div&gt;在主屏幕頂部顯示數據。 當頁面生成 div 時,我想設置焦點。 我不能將 onLoad function 放在 body 標簽上,因為我不知道何時會生成 div。</p><p> &lt;div&gt;標簽不能直接設置焦點。 所以我在下面的 function 中放置了一個帶有 id 的空&lt;a&gt;標簽:</p><pre> function setTableFocus(count){ var flinkText = 'focusLink'+count; document.getElementById(flinkText).focus(); }</pre><p> 我沒有收到任何錯誤,並且我知道在顯示頁面時(通過警報)正在調用 function。 但是,當我使用箭頭鍵或輸入按鈕時,整個頁面都會移動(甚至不是顯示數據的 div)。</p><p> 當我單擊其中一個表格元素時(使用鼠標)。 之后,keydown 事件開始工作。 我想做的是將數據呈現給用戶並自動由鍵盤驅動。</p><p> 有人對我如何做到這一點有任何建議嗎?</p></div>

[英]Set keyboard focus to a <div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何將2個處理程序附加到同一事件? 如何使用jquery為HTML畫布提供鍵盤焦點? 將鍵盤焦點設置為<div></div><div id="text_translate"><p>我有以下代碼片段:</p><pre> &lt;div id="listbox1div" style="z-index:95; background:white; overflow-y:auto; overflow-x:hidden; width:240; height:314px;"&gt; &lt;a id="focusLink2"&gt;&lt;/a&gt; &lt;table id="ptObj_listbox1...</pre><p> 我有一個動態構建&lt;div&gt;元素的頁面(例如上面)。 這個&lt;div&gt;在主屏幕頂部顯示數據。 當頁面生成 div 時,我想設置焦點。 我不能將 onLoad function 放在 body 標簽上,因為我不知道何時會生成 div。</p><p> &lt;div&gt;標簽不能直接設置焦點。 所以我在下面的 function 中放置了一個帶有 id 的空&lt;a&gt;標簽:</p><pre> function setTableFocus(count){ var flinkText = 'focusLink'+count; document.getElementById(flinkText).focus(); }</pre><p> 我沒有收到任何錯誤,並且我知道在顯示頁面時(通過警報)正在調用 function。 但是,當我使用箭頭鍵或輸入按鈕時,整個頁面都會移動(甚至不是顯示數據的 div)。</p><p> 當我單擊其中一個表格元素時(使用鼠標)。 之后,keydown 事件開始工作。 我想做的是將數據呈現給用戶並自動由鍵盤驅動。</p><p> 有人對我如何做到這一點有任何建議嗎?</p></div> 如何編碼頁面以在鍵盤事件中的div中插入圖像? 在鍵盤焦點上的 div 上添加樣式 如何在沒有contentEditable的`div`上添加鍵盤事件 React:鍵盤事件處理程序全部'空' 如何使用jQuery將事件處理程序附加到動態生成的DOM元素上? 在JavaScript中,如何創建自己的Keyboard事件? 如何在iPhone Web應用程序上通過鍵盤捕獲事件?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM