Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在文本字段中模拟退格操作?_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript 如何在文本字段中模拟退格操作?

Javascript 如何在文本字段中模拟退格操作?,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,当按下按钮时,我只想在常规文本框中模拟“退格”,删除光标左侧的字符 谷歌和各种论坛在这方面产生了非常随机的结果。正确的方法是什么?纯Javascript实现,onClick var text = document.getElementById(myTxtBox).value; text = text.substr(0,text.length-1); document.getElementById(myTxtBox).value = text; 所以我猜你不是想把焦点放在文本输入上来删除它

当按下按钮时,我只想在常规文本框中模拟“退格”,删除光标左侧的字符


谷歌和各种论坛在这方面产生了非常随机的结果。正确的方法是什么?

纯Javascript实现,onClick

var text = document.getElementById(myTxtBox).value;  
text = text.substr(0,text.length-1);
document.getElementById(myTxtBox).value = text;

所以我猜你不是想把焦点放在文本输入上来删除它

你可以尝试几种方法。首先,获取输入的当前内容并删除最后一个字符,然后将修改后的字符串放回原处。例如(此代码应该有效):


另一种方法是使用js模拟正在命中的退格字符键。您需要关注输入,将光标移动到行的末尾,然后触发字符。

这似乎在Safari(可能还有Firefox)中也适用,但我还没有在IE中测试过:

  function backspaceAtCursor(id)
  {
    var field = document.getElementById(id);

    if(field.selectionStart)
    {
      var startPos = field.selectionStart;
      var endPos = field.selectionEnd;

      if(field.selectionStart == field.selectionEnd)
      {
        field.value = field.value.substring(0, startPos - 1) + field.value.substring(endPos, field.value.length);

        field.focus(); 
        field.setSelectionRange(startPos - 1, startPos - 1); 
      }
      else
      {
        field.value = field.value.substring(0, startPos) + field.value.substring(endPos, field.value.length);

        field.focus(); 
        field.setSelectionRange(startPos, startPos); 
      }
    }
  }

使用:
backspacecursor('elementid')
jQuery插件模拟文本字段中的退格,在IE、FF、Chrome中工作(基于中的代码)


这只是删除了文本框中的最后一个字符,并没有删除光标左侧的字符。哎哟,我以为他想模拟退格。这正是他想要做的;-)但是退格不会删除文本框中的最后一个字符,而是删除光标前的字符;-)我不确定这样做是否可行,因为按下按钮时文本字段会失去焦点,所以你怎么知道光标在哪里。除非在打印时跟踪它,这对于大多数情况来说是足够简单的,但是不处理光标放在文本范围中间某处的情况,或者当文本被选中时。当
selectionStart
属性未实现或
selectionStart
为零时,将失败<代码>选择每当选择中包含第一个字符时,开始将为零,这意味着无法删除此类选择。这可以通过将检查替换为if(field.hasOwnProperty('selectionStart'))来解决。
  function backspaceAtCursor(id)
  {
    var field = document.getElementById(id);

    if(field.selectionStart)
    {
      var startPos = field.selectionStart;
      var endPos = field.selectionEnd;

      if(field.selectionStart == field.selectionEnd)
      {
        field.value = field.value.substring(0, startPos - 1) + field.value.substring(endPos, field.value.length);

        field.focus(); 
        field.setSelectionRange(startPos - 1, startPos - 1); 
      }
      else
      {
        field.value = field.value.substring(0, startPos) + field.value.substring(endPos, field.value.length);

        field.focus(); 
        field.setSelectionRange(startPos, startPos); 
      }
    }
  }
jQuery.fn.extend({
backspaceAtCaret: function(){
  return this.each(function(i) {    

    if (document.selection) 
    {
        this.focus();
        sel = document.selection.createRange();
        if(sel.text.length > 0)
        {
            sel.text="";
        }
        else
        {
            sel.moveStart("character",-1);
            sel.text="";
        }
        sel.select();
    }
    else if (this.selectionStart || this.selectionStart == "0")
    { 
        var startPos = this.selectionStart;
        var endPos = this.selectionEnd;

        this.value = this.value.substring(0, startPos-1) + this.value.substring(endPos, this.value.length);
        this.selectionStart = startPos-1;
        this.selectionEnd = startPos-1;
        this.focus();
    } 
    else 
    {
        this.value=this.value.substr(0,(this.value.length-1));
        this.focus();
    }
  })
}
});