2008-12-07 6 views
4

В форме CF8, я использую тег, такие как следующие:Как я могу проверить как для целых чисел, так и в диапазоне в форме ColdFusion?

<cfinput 
    type = "Text" 
    name = "Num" 
    value = "0" 
    validate = "range,integer" 
    range = "0,1000" 
    validateAt="onBlur,onSubmit" 
    required = "yes" 
    message = "Invalid Value" 
> 

Когда поле теряет фокус (ONBLUR), вход проверяется только для первого из условий в параметре валидации (он меняется, когда я меняю порядок).

Это HTML/JS код, который генерируется автоматически:

<input 
    name="Num" 
    id="Num" 
    type="text" 
    value="0" 
    onblur="if(!_CF_hasValue(this, 'TEXT', false) 
    && 
    !_CF_checkrange(this.value,0.0,1000.0, true) 
    || 
    !_CF_checkinteger(this.value, true)) 
    { _CF_onErrorAlert(new Array('Invalid Value')); }" 
/> 

OnSubmit обрабатывается с отдельным сгенерированного JS и работает должным образом.

Я что-то не так? CF8 не поддерживает совместную проверку этих двух условий?

+0

Если вы нашли причину, было бы хорошо, если бы вы разместили ее здесь. – Tomalak 2008-12-07 21:34:46

+0

Я представил это Adobe. Когда я получу ответ, я отправлю его. – 2008-12-08 09:16:28

ответ

3

Глядя на JavaScript, созданный, в логике есть ошибка.

В настоящее время это:

if (!has_value && !in_range || !is_integer) show_error() 

, но я думаю, что это на самом деле должно быть:

if (!has_value || !in_range || !is_integer) show_error() 

Поскольку JavaScript закорачивает логические выражения и && имеет приоритет над ||, третий чек в оригинальное выражение никогда не будет выполнено, если другие два возвращают true.

По внешнему виду, я бы предположительно сказал, что это ошибка. Вам не хватает каких-либо CF-патчей? Может быть, это уже было рассмотрено?

0

Из сгенерированного JS он определенно выглядит так, будто он пытается соблюдать оба подтверждения. Если он не работает, вы можете захотеть отладить JS в Firebug, чтобы узнать, что именно происходит.

0

Если проверка диапазона/целое не работает, вы можете проверить с помощью регулярного выражения

^1?\d{1,3}$ 

что означает «начало строки, опционально 1, 1-3 цифр, конец строки».

Не проверено, ваши мили могут отличаться.