2013-09-17 3 views
0

Я делаю командную строку терминала (пользователь может писать в поле ввода и нажать клавишу ввода и получить команду из бэкэнд).вопрос при внесении части окна ввода неотредактируется в javascript

Я передаю значение по умолчанию из модели в мой шаблон для моего ввода. Это значение по умолчанию - это ответ, который извлекается из бэкэнд и каждый раз, когда он изменяется (например, разные имена пользователей и он имеет форму «name $>»), но я хочу заблокировать его до $, чтобы пользователь не мог вернуться и написать до этого, это то, что я пробовал:

var textValue = this.model.get("name") + " $> "; 
var textString = String(textValue); 
var textStringLength = textString.length; 
$("#textInput").on("change keyup keypress keydown", function(evt) {  
    if($("#textInput").val().length < textStringLength) { 
     $("#textInput").val(textValue); 
    } 
}); 

, но я все еще могу его отредактировать! удивительно, что он работает только для backspace (что означает, что я не могу удалить его с помощью backspace), но если я использую клавиши со стрелками или поместите курсор мыши между ними, я все еще могу редактировать! Есть идеи?

Это мой входной лот: <input type="text" id="textInput" name="" style="background: #222; autofocus> Любая идея? с пролетом в качестве другого решения?

+0

Почему просто не имею нередактируемую HTML элемента (например, '') * перед * в поле ввода и обновлять содержимое этого элемента с вашим 'name $>' string? – FixMaker

+0

, если я использую span, все поле ввода будет неотредактировано. Это мой входной код: user2781855

+0

См. Мой ответ ниже о том, как это сделать. – FixMaker

ответ

0

Try Добавление этого:

$("#textInput").attr("disabled",true); 

после:

$("#textInput").val(textValue); 
+0

не удалось. Я все еще могу отредактировать его – user2781855

+0

проверить отредактированный код – Jinandra

+0

Я не думаю, что даже можно отключить только половину текстового поля через JQuery. Почему бы вам не использовать два отдельных текстовых поля с некоторыми css, которые делают – Jinandra

0

, если Вы используете как ниже текстовые поля, то я думаю, что Ваша проблема будет решена. Я уже применил эту логику для решения моей проблемы подобного типа.

<input type="text" id="textInput1" size="1" name="" style="border-right:0px;" value="$" readonly="readonly"> 
<input type="text" id="textInput" name=""> 

Вы должны использовать некоторые CSS для регулировки.

1

Почему бы не выложить свой HTML, как это:

<span id="prefix"></span><input type="text" id="textInput" /> 

Затем вы можете изменить код следующим образом:

var textString = this.model.get("name") + " $> "; 
$('#prefix').text(textString); 

Теперь вы можете редактировать команду после >, но подсказка не редактируемые.

Вы можете увидеть грубый пример здесь: http://jsfiddle.net/5Nnqa/

+0

Я думаю, вы забыли обновить скрипт, потому что он не работает. – Jinandra

+0

@sanki - Если вы подождали две секунды, перед текстовым полем появится приглашение 'fred $>'. был грубым примером :-) Просто доказательство концепции действительно. – FixMaker

+0

haha ​​ok :) my bad :( – Jinandra

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