如何在JavaScript或jQuery中模拟按下退格键

如何在JavaScript或jQuery中模拟按下退格键,javascript,html,jquery,Javascript,Html,Jquery,我花了一个小时阅读了上百万篇不同的帖子,但没有一篇获奖。 简单地说。我已经创建了一个屏幕键盘。 当用户按下字母按钮时,字母将以克拉插入具有焦点的输入中。 这一切都很好,我知道如何插入所有的字母、数字和空格,但我不知道如何在克拉退格。我知道如何去掉最后一个字符,但这是无效的,因为我希望它在克拉退格 我将插入代码以显示它是如何设置的。。。唯一不起作用的部分是if($(this).html()=='BKSP')块中的行 请,谢谢 function insertAtCursor(myField, myV

我花了一个小时阅读了上百万篇不同的帖子,但没有一篇获奖。 简单地说。我已经创建了一个屏幕键盘。 当用户按下字母按钮时,字母将以克拉插入具有焦点的输入中。 这一切都很好,我知道如何插入所有的字母、数字和空格,但我不知道如何在克拉退格。我知道如何去掉最后一个字符,但这是无效的,因为我希望它在克拉退格

我将插入代码以显示它是如何设置的。。。唯一不起作用的部分是
if($(this).html()=='BKSP')
块中的行

请,谢谢

function insertAtCursor(myField, myValue) {
  //IE support
  if (document.selection) {
      myField.focus();
      sel = document.selection.createRange();
      sel.text = myValue;
  }
  //MOZILLA and others
  else if (myField.selectionStart || myField.selectionStart == '0') {
      var startPos = myField.selectionStart;
      var endPos = myField.selectionEnd;
      myField.value = myField.value.substring(0, startPos)
          + myValue
          + myField.value.substring(endPos, myField.value.length);
      myField.selectionStart = startPos + myValue.length;
      myField.selectionEnd = startPos + myValue.length;
  } else {
      myField.value += myValue;
  }
}

$("#keyboard").on("pointerdown", function(e){
  e.preventDefault();
});

$(".sm-kb-btn").on("pointerdown", function (e) {
  if ($(this).html() == 'BKSP') {
    var e = new Event("keydown");
    e.key = "Backspace";
    e.code = "Backspace";
    document.getElementById("search-box-input").dispatchEvent(e);
  }
  else {
    insertAtCursor(document.getElementById("search-box-input"), $(this).html());
  }

})

出于安全原因,浏览器和javascript在访问设备硬件时有限制。您可以抛出
keydown
事件,但它不会执行与实际按键相同的操作

如果您的目标只是保持插入符号位置,则可以使用
selection.setSelectionRange(插入符号位置,插入符号位置)

下面是一个演示:

let output=document.querySelector('input');
document.querySelector(“.buttons”).addEventListener('click',函数(e){
如果(e.target.nodeName=='BUTTON'){
让插入符号位置=output.selectionStart | | 0,//当前插入符号位置
character=e.target.textContent,//按下按钮/键
新的插入符号位置=Math.max(0,插入符号位置+(字符=='BKSP'?-1:1));
//如果是BKSP,则移动插入符号-1,否则移动插入符号+1。同时确保它>=0
如果(字符=='BKSP'){//删除当前插入符号位置之前的字符
output.value=output.value.substr(0,新插入符号位置)+output.value.substr(插入符号位置);
}else{//在当前字符位置插入字符
output.value=output.value.substr(0,插入符号位置)+字符+output.value.substr(插入符号位置);
}
//修改output.value后重置插入符号位置
output.setSelectionRange(新插入符号位置、新插入符号位置);
}      
});
按钮{
高度:24px;
利润率:16px4px;
}

Q
W
E
R
T
Y
BKSP

我在if块中添加了以下代码(根据您提交的内容编辑),现在它工作正常:let output=document.getElementById(“搜索框输入”);让插入符号位置=output.selectionStart | | 0,//当前插入符号位置字符=e.target.textContent,//按钮/键按下new(新插入符号位置=数学.max(0,插入符号位置+-1);output.value=output.value.substr(0,新插入符号位置)+output.value.substr(插入符号位置);output.setSelectionRange(新插入符号位置、新插入符号位置);是的,我只做了最少的测试。很高兴我能帮你指出正确的方向。