2009-03-10 1 views
8

У меня есть поле ввода, которое может содержать только числовые значения (с использованием плагина this).
Теперь я хочу, чтобы вход был ниже, скажем, 90. Если введено значение, превышающее эту максимальную кепку или не может быть разобрано, должно быть вставлено предыдущее значение. По умолчанию поле будет содержать «1».Сохранять значение в поле ввода html ниже установленного количества

<input id="targetQuantity" name="targetQuantity" type="text" value="1" /> 

Я полагаю, что я должен как-то поймать текущее значение. Попробуйте проанализировать новое значение. Если это допустимое значение, продолжайте с этим значением, если нет, верните старый.
Поскольку мои навыки JS действительно ограничены, я даже не знаю, какие события доступны для меня, и я нахожу, что документация, которую я нашел на intarwebz, довольно запутанна.

--EDIT--
Я закончил с использованием Sergei's кода и используя Aaron's совет юзабилити.
Все, что я ищу сейчас, это включить/отключить отправку всей формы. Просто отключить кнопку отправки недостаточно.

+0

Почему это с javascript? Почему бы просто не добавить maxlength = "90" к атрибутам элемента ввода? – robertc

+1

, потому что maxlength допускает 90 символов. он хочет maxvalue, если он существует ... – Spikolynn

+0

Duh! Должен был прочитать это более тщательно ... – robertc

ответ

6
<input id="targetQuantity" name="targetQuantity" type="text" value="1" onkeyup="check(this)" /> 

... JavaScript:

var v=1; 

function check(i) {  
    if(i.value > 100) { 
    i.value=v; 
    alert("< 100"); 
    } 
    else 
    v=i.value; 
} 
2

Это должно помочь: JavaScript Madness: Keyboard Events

Теперь слово о практичности: Никогда не изменить значение в качестве пользовательских типов. Если вы хотите знать, почему, попробуйте.

Вместо этого поверните поле красного цвета (установите цвет фона). Когда форма отправлена, запустите проверку еще раз, чтобы убедиться, что пользователь исправил ошибку. Если нет, отобразите сообщение об ошибке inline («значение должно быть < 90») где-то рядом с полем и установите фокус на поле.

Не использовать предупреждение(). alert() предназначен только для отладки и не используется в реальном веб-приложении, так как он прерывает рабочий процесс пользователя и b) не работает, когда пользователь печатает: в конце концов, пользователь ударит пробел и диалоговое окно будет закрыт, возможно, с пользователем, когда-либо замечающим, что есть диалог или то, что он сказал.

Возможно, вы захотите проверить библиотеку, такую ​​как jQuery или Prototype, потому что они уже содержат все необходимые вам строительные блоки, и они исправляют множество ошибок браузера для вас.

+0

Спасибо за совет. Я не использую предупреждения, кроме отладки. На самом деле, они являются причиной того, что я часто путешествую без скрипта в Opera. Кроме того, я уже использую JQuery. –

1

написать этот JS в яваскрипта блока коды:

var LastGood = 1; 
function CheckValue(input, max) { 
    var value = Number(input.value); 
    if (NaN == value || input.value>max) { //it is not a number or is too big - revert 
     input.value = LastGood; 
    } else { //it is ok, save it as the last good value 
     LastGood = value; 
    } 
} 

изменить вашу входную форму на

<input id="targetQuantity" name="targetQuantity" type="text" value="1" onkeyup="CheckValue(this, 90)" /> 
Смежные вопросы