не удается получить setSelectionRange, чтобы поместить курсор в начало ввода

#javascript

#javascript

Вопрос:

Привет,

У меня есть этот код:

 inputform.addEventListener('keypress', function(e) {
 const tgt = e.target;
 
 if (tgt.id==="usermsg") {
  if (e.which == 13 amp;amp; !e.shiftKey amp;amp; tgt.value) {
    tgt.value = '';
    tgt.setSelectionRange(0,0);
  }
 }
});
 

когда вы нажмете ENTER, он должен очистить ввод текстовой области и вернуть курсор в начало, но он этого не сделает. Вместо этого курсор остается на второй строке. Вот скрипка: https://jsfiddle.net/xbc0vong /

почему это?

Спасибо.

Ответ №1:

Используйте e.preventDefault(); , чтобы избежать поведения по умолчанию.

Попробуйте это

 inputform.addEventListener('keypress', function(e) {
 const tgt = e.target;
 
 if (tgt.id==="usermsg") {
  if (e.which == 13 amp;amp; !e.shiftKey amp;amp; tgt.value) {
    e.preventDefault();
    tgt.value = '';
    tgt.setSelectionRange(0,0);
  }
 }
});
 

Code sandbox => https://jsfiddle.net/pa6cjweo/1 /

Комментарии:

1. @Cain Nuke, зацени это!

Ответ №2:

Похоже, что после .value очистки атрибута требуется небольшая задержка. Использование setTimeout() сработало.

 const inputForm = document.forms[0];


inputForm.addEventListener('keypress', (e) => {
  const tgt = e.target;
  if (tgt.id === 'userMsg' amp;amp; e.keyCode === 13) {
    tgt.value = '';
    setTimeout(() => {
      tgt.focus();
      tgt.setSelectionRange(0, 0);
    }, 0);
  }
}); 
 <form id="inputForm">
  <textarea id="userMsg"></textarea>
</form>