javascript - Onkeydown JS函数添加调用相同函数的输入

标签 javascript html function increment keycode

我正在处理一个表单并尝试创建一个执行以下操作的 onkeydown 函数:

  1. 仅在按下 tab 键 时触发(正常工作)
  2. 插入一个新元素(input)(一切正常)
  3. 然后插入的 input 调用相同的 onkeydown 函数(卡在这里!)

尝试了增量++ 但不起作用?

这是我要做的:

<html>
<head>


</head>

<body>
    <form>
        <input type ="text" OnKeydown = "tab(event)" />
        <div id ="insert">

        </div>
    </form>


</body>


<script>
    function tab(event) {
        if (event.keyCode == 9) {
            var ins = '<input  type ="text" OnKeydown = "tab(event)"/>'; 
            document.getElementById("insert").innerHTML=ins;
            ins++;
        }
    };
</script>

</html>

最佳答案

兴趣点是:

function tab(event) {
  if (event.keyCode == 9) {
    // remove the event listener for the old element
    event.target.removeEventListener('keydown', tab);
    
    
    var ins = document.createElement("input");
    ins.type = "text";
    ins.autofocus = true;
    document.getElementById("insert").appendChild(ins);
    ins.addEventListener('keydown', tab, false);
  }
}

window.addEventListener('DOMContentLoaded', function(e) {
  document.getElementsByTagName("input")[0].addEventListener('keydown', tab, false);
}, false);
<form>
    <input type ="text"/>
    <div id ="insert">
    </div>
</form>

为了像评论中描述的那样添加一行输入,您必须创建一个新行并将其附加到表中,创建 3 个单元格,并为每个单元格添加相应的输入字段,并将选项卡事件处理程序设置为例如最后一个单元格。

要在表格中创建新行,您可以引用insertRow , 而为了添加新单元格,您可以查看 insertCell

function tab(event) {
  if (event.keyCode == 9) {
    event.target.removeEventListener('keydown', tab);

    var table = document.getElementById('tbl').getElementsByTagName('tbody')[0];

    var newRow = table.insertRow(table.rows.length);

    var newCell = newRow.insertCell(-1);
    var ins = document.createElement("input");
    ins.type = "number";
    ins.autofocus = true;
    newCell.appendChild(ins);

    newCell = newRow.insertCell(-1);
    ins = document.createElement("input");
    ins.type = "text";
    ins.autofocus = true;
    newCell.appendChild(ins);

    newCell = newRow.insertCell(-1);
    ins = document.createElement("input");
    ins.type = "number";
    ins.autofocus = true;
    newCell.appendChild(ins);

    ins.addEventListener('keydown', tab, false);
    setTimeout(function () {
      ins.focus();
    }, 10);
  }
}

window.addEventListener('DOMContentLoaded', function (e) {
  document.getElementsByTagName("input")[0].addEventListener('keydown', tab, false);
}, false);
<form>
    <input type="text"/>

    <div id="insert">
        <table id="tbl">
            <thead>
            <tr>
                <th>Number</th>
                <th>Text</th>
                <th>Number</th>
            </tr>
            </thead>
            <tbody>
            </tbody>
        </table>
    </div>
</form>

关于javascript - Onkeydown JS函数添加调用相同函数的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38357179/

相关文章:

javascript - 迭代对象的关联数组

javascript - 模拟 net.Socket 进行单元测试

html - 在同一表格单元格中垂直排列两个复选框

c++ - 函数不接受 1 个参数 c++

javascript - 如何从另一个 HTML 页面调用函数?

javascript - jQuery手动调用点击函数

javascript - 如何使用 SlideUp 知道是否所有匹配的元素都已隐藏

javascript - Ajax 和 PHP 同一页面无法正常工作

javascript - 形状未出现在 html Canvas 上

html - Vaadin 标签对齐