Как я могу имитировать действие возврата на одну позицию в текстовом поле? - PullRequest
3 голосов
/ 14 ноября 2009

Когда кнопка нажата, я просто хочу смоделировать «возврат» в обычном текстовом поле, удаляя символ слева от курсора.

Google и различные форумы дают действительно случайные результаты по этому вопросу. Как правильно это сделать?

Ответы [ 4 ]

4 голосов
/ 14 ноября 2009

Это похоже на работу в 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); 
      }
    }
  }

Использование: backspaceAtCursor('elementid')

2 голосов
/ 14 ноября 2009

Так что я предполагаю, что вы не хотите фокусироваться на вводе текста, чтобы удалить его.

Есть несколько способов, которые вы можете попробовать. Сначала получите текущее содержимое ввода и удалите последний символ, затем верните измененную строку обратно. Например (этот код должен работать):

var txt = $('#myinputtextbox');
txt.val(txt.val().slice(0, -1));

Другой вариант - использовать js для имитации нажатия клавиши возврата на клавишу. Вам нужно сосредоточиться на вводе, переместить курсор в конец строки, а затем вызвать символ.

1 голос
/ 14 ноября 2009

Javascript, onClick

var text = document.getElementById(myTxtBox).value;  
text = text.substr(0,text,length-1);
document.getElementById(myTxtBox).value = text;
0 голосов
/ 18 октября 2011

Плагин jQuery для имитации возврата в текстовом поле, работает в IE, FF, Chrome (на основе кода из здесь ).

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();
    }
  })
}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...