2013-11-08 5 views
2

Я пытаюсь выполнить проверку на стороне клиента на стороне клиента с помощью элемента HTML5 <input type="number">. Существует также проверка на стороне сервера, поэтому давайте не начнем разглагольствовать об этом ...;)input type = "number" и IE10 +

Я хочу предоставить три уровня статуса проверки: зеленый для допустимого числа в пределах заданного диапазона, желтый для выхода, номер диапазона или пустое поле, а красный - для нечислового ввода.

Моя проблема в том, что IE11 (и, я полагаю, IE10), кажется, возвращает пустое свойство .value для нечислового ввода. То есть, если я ввожу abc в поле, .value - "". Это мешает мне отличить желтый (пустой) от красного (мусор).

Я знаю о существовании нового .valueAsNumber собственности, но это не совсем мне помочь, как я не могу отличить пустые от других браузеров и нечисловой на IE10/11 (.value пусто, .valueAsNumber является NaN) ,

Кто-нибудь решил эту проблему? Я не хочу прибегать к отслеживанию нажатий клавиш, и я хочу поддерживать старые браузеры (обратно в IE8), которые возвращаются к type="text" и не имеют .valueAsNumber. Заранее спасибо ...

Edit: просто для уточнения (надеюсь), мой вопрос заключается в том, что выход .value и .valueAsNumber в IE10/11 не позволяет мне различать без входа и без ввода цифр. Я хотел бы иметь возможность отличать эти два случая без обхода браузером и вернуться к type="text".

+0

Почему бы не рассмотреть возможность изменения с разрешения _blank_ на использование некоторого _default_, находящегося вне вашего диапазона, например. '0', который вы можете обнаружить и заставить вести себя по-другому, тогда это позволяет всегда отбрасывать все на _Number_, чтобы вы всегда могли работать только с _Numbers_? (Вы все равно должны проверять на стороне сервера) –

ответ

2

Не могли бы вы присвоить разумное значение по умолчанию (ноль?) Для вашего класса ввода? Тогда вам не нужно было бы делать различие в вашем коде в первую очередь?

Прагматизм всегда перевешивает изобретательность в моей книге;)

0

Идите вперед и использовать valueAsNumber в браузерах, которые поддерживают его.

var 
    coerced, 
    value, 
    input = yourInput; 

if(typeof input.valueAsNumber !== "undefined") { 
    value = (isNaN(input.valueAsNumber)) ? "dummystring" : input.valueAsNumber; 
} else { 
    value = input.value; 
} 

if(typeof input.value === "string") { 
//non-numeric 
} else { 
coerced = +input.value; 
//do validation on coerced - it is now a number 
} 

Браузеры, поддерживающие valueAsNumber, они также поддерживают input[type=number], так что это будет решить вашу проблему.

+0

Спасибо, но это не моя проблема. Я не могу найти способ различать пустой и нечисловый ввод в IE11, даже используя '.value' и' .valueAsNumber', так как '.value' пуст в обоих случаях. – Mark

+0

Если значение ввода является пустой строкой, то мои тесты показывают, что IE11 возвращает 'NaN' для' .valueAsNumber', а не пустое, любое пустое. – Adam

+0

Да, в этом проблема. Пустое поле ввода дает мне пустую строку для '.value' и' NaN' для '.valueAsNumber'; Постановка «abc» в поле дает те же результаты. Я не могу найти способ отличить присутствие нечисловых символов в поле формы от отсутствия ввода вообще. – Mark

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