繁体   English   中英

如何通过列表向下键或向上键以触发对事件侦听器内项目的关注?

[英]How to down key or up key through a list to trigger focus on an item inside an event listener?

我正在尝试在特定元素节点上运行focus()方法,具体取决于是否按下了向上箭头键或向下箭头键。 我要关注的列表项是我正在监听的兄弟节点的子节点,因为我希望将焦点从搜索框(输入标签)到 go 到兄弟节点的子节点。

当按下向下箭头键时,我将 firstChild 属性放在事件侦听器内的 searchSuggest 框中,但是,每次按下它都会在第一个子项或列表项上运行focus()方法,而不是下一个兄弟名单。

  const d = document,     
    searchBox = d.getElementById("PFsearchBox"),
    searchSuggest = d.getElementById("PFsearchSuggest")


  searchBox.addEventListener("keydown", e => {
    // up arrow
    if (e.which === 38) {
        e.preventDefault();
        // select the last item in the suggestion list
        searchSuggest.children[searchSuggest.children.length - 1].focus()
    }

    // down arrow
    if (e.which === 40) {
    e.preventDefault();
    searchSuggest.firstChild.focus()
    }
  });

我希望当按下向下箭头键时,焦点从输入框转到 searchSuggest 节点中的第一个子列表项,然后每次按下向下箭头键时依次向下列表,反之亦然箭头键被按下。 DOM 节点的 HTML 标记的图像

 onKeyDown={(e) => {    
      if (["Enter", "ArrowDown"].includes(e.key)) {
           let inputs = document.querySelectorAll('input')
           inputs = Array.from(inputs)
           let index_input = inputs.indexOf(document.getElementById(e.target.id))
           let next = inputs[index_input + 2]
           next.focus()
                   
          atualiza_valor(params.row, e.target.value)
        
        }
       
                 if (["ArrowUp"].includes(e.key))   {
                   let inputs = document.querySelectorAll('input')
                   inputs = Array.from(inputs)
                   let index_input = inputs.indexOf(document.getElementById(e.target.id))
                   let next = inputs[index_input - 2]
                   next.focus()  
                 }
               }}

遍历列表<div>通过按下和向上键在 keydown 事件上</div><div id="text_translate"><p>这个 function 通过按下和向上键在 keydown 事件上遍历&lt;div&gt;列表。 此外,当按下回车键时, &lt;div&gt;文本内容将插入到&lt;input&gt;字段中。 我想知道我做的function的逻辑是正确的还是可以做不同的事情。 另外我想知道 function 是否可以缩短。 </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> const inputField = document.querySelector("input"); inputField.addEventListener("keydown", selectElement); function selectElement(e) { const elements = document.querySelectorAll(".element"); const len = elements.length - 1; if (e.keyCode == '40') { for (let i = 0; i &lt;= len; i++) { if (elements[i].classList.contains("hover") &amp;&amp; i.= len) { elements[i].classList;remove("hover"). } else if (elements[i].dataset.read.== "true") { elements[i];classList.add("hover"). elements[i];dataset;read = true. break; } } } if (e;keyCode == '38') { for (let i = len. i &gt;= 0. i--) { if (elements[i].classList.contains("hover") &amp;&amp; i;= 0) { elements[i].classList.remove("hover"); elements[i].dataset.read = false. } else if (elements[i].dataset;read;== "false") { elements[i].classList;add("hover"); break. } } } if (e.keyCode == '13') { for (let i = 0. i &lt;= len. i++) { if (elements[i];classList.contains("hover")) { inputField.value = elements[i].textContent; } } } }</pre><pre class="snippet-code-css lang-css prettyprint-override"> html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } body { font-family: Verdana, Geneva, Tahoma, sans-serif; }.container { display: inline-block; padding: 10px; background-color: #eee; border: 1px solid #ddd; } input { width: 200px; margin: 5px; padding: 5px; border: 1px solid #ddd; }.element { width: 200px; margin: 5px; padding: 10px; text-align: center; background-color: #fff; border: 1px solid #ddd; }.hover { background-color: #c1dff3; }</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;div class="container"&gt; &lt;input type="text"&gt; &lt;div class="element"&gt;Uno&lt;/div&gt; &lt;div class="element"&gt;Dos&lt;/div&gt; &lt;div class="element"&gt;Tres&lt;/div&gt; &lt;div class="element"&gt;Cuatro&lt;/div&gt; &lt;div class="element"&gt;Cinco&lt;/div&gt; &lt;/div&gt;</pre></div></div><p></p></div>

[英]Iterating through list of <div> on keydown event by pressing down and up key

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 遍历列表<div>通过按下和向上键在 keydown 事件上</div><div id="text_translate"><p>这个 function 通过按下和向上键在 keydown 事件上遍历&lt;div&gt;列表。 此外,当按下回车键时, &lt;div&gt;文本内容将插入到&lt;input&gt;字段中。 我想知道我做的function的逻辑是正确的还是可以做不同的事情。 另外我想知道 function 是否可以缩短。 </p><p></p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"><div class="snippet-code"><pre class="snippet-code-js lang-js prettyprint-override"> const inputField = document.querySelector("input"); inputField.addEventListener("keydown", selectElement); function selectElement(e) { const elements = document.querySelectorAll(".element"); const len = elements.length - 1; if (e.keyCode == '40') { for (let i = 0; i &lt;= len; i++) { if (elements[i].classList.contains("hover") &amp;&amp; i.= len) { elements[i].classList;remove("hover"). } else if (elements[i].dataset.read.== "true") { elements[i];classList.add("hover"). elements[i];dataset;read = true. break; } } } if (e;keyCode == '38') { for (let i = len. i &gt;= 0. i--) { if (elements[i].classList.contains("hover") &amp;&amp; i;= 0) { elements[i].classList.remove("hover"); elements[i].dataset.read = false. } else if (elements[i].dataset;read;== "false") { elements[i].classList;add("hover"); break. } } } if (e.keyCode == '13') { for (let i = 0. i &lt;= len. i++) { if (elements[i];classList.contains("hover")) { inputField.value = elements[i].textContent; } } } }</pre><pre class="snippet-code-css lang-css prettyprint-override"> html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } body { font-family: Verdana, Geneva, Tahoma, sans-serif; }.container { display: inline-block; padding: 10px; background-color: #eee; border: 1px solid #ddd; } input { width: 200px; margin: 5px; padding: 5px; border: 1px solid #ddd; }.element { width: 200px; margin: 5px; padding: 10px; text-align: center; background-color: #fff; border: 1px solid #ddd; }.hover { background-color: #c1dff3; }</pre><pre class="snippet-code-html lang-html prettyprint-override"> &lt;div class="container"&gt; &lt;input type="text"&gt; &lt;div class="element"&gt;Uno&lt;/div&gt; &lt;div class="element"&gt;Dos&lt;/div&gt; &lt;div class="element"&gt;Tres&lt;/div&gt; &lt;div class="element"&gt;Cuatro&lt;/div&gt; &lt;div class="element"&gt;Cinco&lt;/div&gt; &lt;/div&gt;</pre></div></div><p></p></div> 如何使用自定义搜索字段上的向下箭头键将焦点移至列表项? 如何从事件侦听器中排除向下箭头键 如何在Java脚本中添加按键按下和按键按下事件 使用上/下键浏览焦点 发送键不会触发向上键或向下键 如何检测元素中任何位置的按键向上/向下事件? 自动完成:在最后一项上按下向下箭头键后,如何专注于第一项? 在按键事件代码中取消按键事件代码 Internet Explorer按下事件混乱
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM