2016-03-24 3 views
0

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

input.setSelectionRange(input.value.length,input.value.length); 

Курсор перемещается в конец, но текст остается в том же положении. Он работает в Firefox, но не работает в Chrome.

var input = document.querySelector("input"); 
 
input.onclick = function(){ 
 
    this.setSelectionRange(this.value.length,this.value.length) 
 
}
<input id="beLowerCase" type="Text" value="______________________________232332" />

+0

Посмотрите там: http://stackoverflow.com/questions/11723420/chrome-setselectionrange-not-work-in-oninput-handler –

+0

@ Magicprog.fr работает так же, как мой пример –

ответ

1

Это не проблема JS, но вопрос CSS.

Вместо установки setSelectionRange просто добавьте в код следующий CSS.

<style> 
input#beLowerCase {text-align:right;} 
</style> 

Рабочий код ниже:
Я добавил класс вместо ID как положить стили классов лучше практика, чем писать его для идентификаторов.

document.querySelector("input").onclick = function() { 
 
    var val = this.value 
 
    this.value = ""; 
 
    this.value = val; 
 
    this.style.textAlign = "right"; 
 
    this.style.textIndent = "-1000px"; 
 
} 
 
document.querySelector("input").onkeydown = function() { 
 
    this.style.textAlign = "auto"; 
 
    this.style.textIndent = "0"; 
 
}
<input id="beLowerCase" class="align-right" type="Text" value="______________________________232332" />

Надеется, что это устраняет проблему.

UPDATE:

Удалены стили и стили Добавлено через JS

Обновлена ​​ссылка JS скрипки - https://jsfiddle.net/hsbea61b/6/

+0

Нет работы https://jsfiddle.net/hsbea61b/ –

+0

обновил jsfiddle, чтобы отразить функциональность. https://jsfiddle.net/hsbea61b/3/. Также обновленный ответ выше. – Bala

+0

Он работает, но я не могу вернуться к началу значения) –

0

Вы пытаетесь добавить CSS динамически

text-align: right; 
0

Вместо нативный setSelectionRange использует эту функцию:

function setSelectionRange(input, selectionStart, selectionEnd) { 
    if (input.setSelectionRange) { 
     input.focus(); 
     var isChrome = !!window.chrome && !!window.chrome.webstore; 
     if (isChrome){ 
      input.style.textIndent = "-1000px"; 
      input.onblur =function(){ 
       input.style.textIndent = "0px"; 
      }; 
      window.setTimeout(function() { 
       input.setSelectionRange(selectionStart, selectionEnd); 
      }, 0); 
     }else 
      input.setSelectionRange(selectionStart, selectionEnd); 
    }else if (input.createTextRange) { 
     var range = input.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', selectionEnd); 
     range.moveStart('character', selectionStart); 
     range.select(); 
     } 
} 

На самом деле проблема Compability является ошибка исправлена ​​в Chrome 39. Таким образом, вместо:

input.onclick = function(){ 
    this.setSelectionRange(this.value.length,this.value.length) 
} 

вы будете использовать:

input.onclick = function(){ 
     setSelectionRange(this,this.value.length,this.value.length) 
} 

Вот fiddle, что я проверил.

+0

в хром эта работа такая же как мой пример, потому что использование setSelectionRange. –

+0

Да, жаль, что я забыл самую важную часть, посмотрю на мое редактирование – rsabir

+0

Это не работает https://jsfiddle.net/hsbea61b/4/)) –