3

私は Position Absolute のフォーム検証エンジンを使用しています。

これが私のために解決できることを望んでいる検証の特定のケースがあります。別のフィールドの値に基づいて、あるフィールドを必須にする必要があります。

例えば:

If country.dropdown = "USA", then state.dropdown is required.  

また

If country.dropdown <> 'USA" then state.dropdown is not required.

これは JQuery Validation Engine で可能だと思いますか? もしそうなら、あなたは私を正しい方向に向けることができますか?

4

1 に答える 1

1

まず、Position Absolute のフォーム検証エンジンを使用したことはありませんが、あなたの質問を読んで興味を持ちました。ドキュメント ( https://github.com/posabsolute/jQuery-Validation-Engine ) から、カスタム検証関数を作成する必要があるようです。

ここで動作するフィドルを作成しました: http://jsfiddle.net/5pKjW/6/

動作したとしても、584 行目の検証エンジンでこの条件のために「センチネル値」が必要になるため、完全に満足しているわけではありません。

// If the rules required is not added, an empty field is not validated
if(!required && field.val() == "" && !errorMsg) options.isError = false; 

これは、カスタム関数を使用した選択のマークアップです。

<select class="validate[funcCall[checkCountry]]" type="text" name="state" id="state">
    <option value="none" ></option>
    <option value="CALIFORNIA" >CALIFORNIA</option>
    <option value="NEW ENGLAND" >NEW ENGLAND</option>
    <option value="TEXAS" >TEXAS</option>
</select>

そして、これはバリデータの初期化です:

jQuery("#formID").validationEngine({
    'customFunctions': {
        'checkCountry': function (field, rules, i, options){
            if ($('#country').val() === 'USA' && field.val() === 'none') {
                return options.allrules.required.alertText;
            }
        }
    }
});

1) 最初に、グローバルにするか、プラグインの引数として渡すことができる検証関数を定義する必要があります (上記で行ったように)。カスタム関数は、フィールド、ルール、i、オプションなどの入力を受け入れます。フォームへの参照はありません。現在のフィールドへの参照のみがあります。したがって、別のフィールドにアクセスする場合は、通常どおり jQuery で選択する必要があります (例では $('#country') )。

2) 検証条件を確認します。この例では、次の場合に失敗します。

$('#country').val() === 'USA' && field.val() === 'none'

条件が守られない場合、関数は文字列を返す必要があります。この例では、options.allrules.required で標準メッセージを返しました。このドキュメントでは、カスタム関数のカスタム メッセージを定義する方法について説明しています。

ご覧のとおり、

if(!required && field.val() == "" && !errorMsg) options.isError = false;

検証エンジンの行では、開発者は内部の条件をif失敗にすることを余儀なくされており、必要な条件を true に設定したり、エラー メッセージを偽の値に設定したりすることは正しくありません。だから、唯一の方法は作ることfield.val() != ''です。このため、マークアップの最初のオプション要素には、none空ではなく番兵値があります。これはクリーンなソリューションではなく、簡単に実装することさえできないかもしれません (マークアップを自分で生成するかどうかはわかりません (そうしないと、事態はさらに難しくなり、javascript を介してフォームを操作する必要があります)。検証エンジンの初期化前))。

これはクリーンなソリューションではありません。より良い解決策はcondRequired、引数の 1 つが入力されているかどうかをチェックするだけでなく、カスタム関数を受け入れる場合に限り、 を使用していたでしょう。

于 2012-07-16T23:41:13.883 に答える