Как я могу проверить как для целых чисел, так и для диапазона в форме ColdFusion? - PullRequest
4 голосов
/ 07 декабря 2008

В форме CF8 я использую тег, такой как:

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

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

Это 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 не поддерживает совместную проверку этих двух условий?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2008

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

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

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

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

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

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

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

0 голосов
/ 07 декабря 2008

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

^1?\d{1,3}$

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

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

0 голосов
/ 07 декабря 2008

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

...