2016-11-09 7 views
0

リストに既に存在する場合は、入力に入力できないようにフォームを検証したいと思います。jQueryの妥当性検査でカスタムメソッドを検証する

<input id="form:inptCode" type="text" name="form:inptCode" class="number"> 

bellowはprimefacesのorderlist要素のhtmlです。

<select id="form:choices_values" name="form:choices_values" multiple="true" class="ui-helper-hidden"> 
    <option value="1" selected="selected">1</option> 
</select> 

ので、リストは私がのinputTextに番号1を入力すると、エラーメッセージが表示されます値1が含まれています。

これを達成するために、メソッドを追加し、このメソッドがfalseを返すときにフォームの検証を試みました。 jQueryのバリデーションの経験はあまりありませんが、実際にはほんのいくつかの方法しか書いていません。

$.validator.addMethod('codExistss', function (value, element) { 
    var lstChoices = document.getElementById('form:choices_values'); 
    for (i = 0; i &lt; lstChoices.options.length; i++) { 
     return value === lstChoices.option[i].value; 
    } 
}, "The code already exists."); 

$(document).ready(function() { 
    $('#form').validate({ 
    rules: { 
     'form:inptCode': { 
       codExistss: false 
     } 
    } 
    }); 
}); 

私のコードは機能しないようです。だから、理由を理解できるように助けてくれますか?あなたは、すべてのリストのオプションを超えるループを持っている

+0

変更 "<を"。 –

+0

ここで間違った名前を書きましたが、私のページには正しいですし、その方法は機能していません。 –

+0

コンソールにエラーがありますか? –

答えて

0

for (i = 0; i &lt; lstChoices.options.length; i++) { 
     return value === lstChoices.option[i].value; 
    } 

は、あなたが1つの以上のオプションを持つことになりますと仮定すると、それだけで1時間の条件がtrueを返しますし、あなたの検証が台無しにされていることだけで十分です。

もう1つは、カスタム関数のルールフラグをオンにしなかったことです。 codExistss: falseは「このルールで入力を検証しない」という意味でtrueに変更しました。

はこれを試してください:<へ

$.validator.addMethod('codExistss', function (value, element) { 

     var lstChoices = document.getElementById('form:choices_values'); 
     if(lstChoices.options[lstChoices.selectedIndex].value===value) {return false;} 
     return true; 
     },"The code already exists."); 

$(document).ready(function() { 
    $('#form').validate({ 
    rules: { 
     'form:inptCode': { 
    // Specify that form:inptCodeshould be validated 
    // by codExistss rule 
       codExistss: true 
     } 
    } 
    }); 
}); 
+0

フィールドが有効なのは、メソッドがfalseを返す場合のみです。 codExistss:trueを指定した場合、codExistssがfalseを返すときにどのように検証できますか? –

+1

いいえ、フィールドが有効なのは、関数がTRUEを返した場合のみです。FALSEを返した場合は無効です。 –

+0

@NellyJunior、どのように見えるか、選択した値から選択した値と比較したい、コードを編集してみる。 –

関連する問題