4

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 は、これら 2 つの条件を一緒に検証することをサポートしていませんか?

4

3 に答える 3

3

これが作成した JavaScript を見ると、ロジックにエラーがあります。

現在、次のとおりです。

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

しかし、私はそれが本当にあるべきだと思います:

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

JavaScript は論理式を省略して に&&優先する||ため、元の式の 3 番目のチェックは、他の 2 つが を返した場合には実行されませんtrue

見た目から、これはバグだと暫定的に言えます。不足している CF パッチはありますか? たぶん、これはすでに対処されていますか?

于 2008-12-07T09:09:54.977 に答える
0

生成されたJSからは、両方の検証を尊重しようとしているように見えます。動作しない場合は、FirebugでJSをデバッグして、何が起こっているのかを正確に確認することをお勧めします。

于 2008-12-07T04:22:54.993 に答える
0

範囲/整数の検証が機能しない場合は、正規表現で検証できます

^1?\d{1,3}$

これは、「文字列の始まり、オプションの 1、1 ~ 3 桁、文字列の終わり」を意味します。

テストされていないため、マイルは異なる場合があります。

于 2008-12-07T12:55:57.143 に答える