2015-12-28 3 views
2

Вот код, который я использую для установки позиции каретки перед третьим символом входного значения. Он работает отлично, за одним исключением - функция setCaretPosition() выполняется через мгновение после запуска сценария по умолчанию, пока я хочу, чтобы это произошло немедленно. Есть ли шанс избежать размещения курсора по умолчанию без добавления элемента overlay?Запретить размещение курсора по умолчанию

function setCaretPosition(elemId, caretPos) { 
    var el = document.getElementById(elemId); 

    el.value = el.value; 
    //^this is used to not only get "focus", but 
    // to make sure we don't have it everything -selected- 
    // (it causes an issue in chrome, and having it doesn't hurt any other browser) 

    if (el !== null) { 

     if (el.createTextRange) { 
      var range = el.createTextRange(); 
      range.move('character', caretPos); 
      range.select(); 
      return true; 
     } 

     else { 
      // (el.selectionStart === 0 added for Firefox bug) 
      if (el.selectionStart || el.selectionStart === 0) { 
       el.focus(); 
       el.setSelectionRange(caretPos, caretPos); 
       return true; 
      } 

      else { // fail city, fortunately this never happens (as far as I've tested) :) 
       el.focus(); 
       return false; 
      } 
     } 
    } 
} 

var inputId = 'test'; 

document.getElementById(inputId).addEventListener('click', function() { 
    setCaretPosition(inputId, 2); 
},false) 

https://jsfiddle.net/82fnpmf6/

ответ

1

Да, есть способ избежать этого резкого изменения позиции. Мы можем изменить восприятие, совершив некоторые обманы. Вы можете клонировать ввод и накладывать его на оригинал, как только вы нажимаете на поле ввода. Используйте таймаут, чтобы снова изменить порядок полей, чтобы не мигающий клон снова позади оригинала. Поэтому в основном пользователь видит не выбранный вход в течение нескольких миллисекунд, который должен быть достаточным для размещения курсора там, где он принадлежит.

Поскольку изменение позиции происходит менее чем за секунду, я не думаю, что это беспокоит пользователя.

Смежные вопросы