jQuery Validate Required Select


146

jQuery Validateプラグインを使用してHTML選択要素を検証しようとしています。「必須」ルールをtrueに設定しましたが、デフォルトではインデックスが選択されていないため、常に検証に合格しています。必要なルールで使用される空の値を定義する方法はありますか?

UPD。例。次のHTMLコントロールがあるとします。

<select>
  <option value="default">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

検証プラグインに「デフォルト」値を空として使用させたい。


私たちが助けることができるようにコードのスニペットを入れてください。
リー

回答:


213

あなた自身のルールを書くことができます!

 // add the rule here
 $.validator.addMethod("valueNotEquals", function(value, element, arg){
  return arg !== value;
 }, "Value must not equal arg.");

 // configure your validation
 $("form").validate({
  rules: {
   SelectName: { valueNotEquals: "default" }
  },
  messages: {
   SelectName: { valueNotEquals: "Please select an item!" }
  }  
 });

1
:あなたはこのように、選択したテキストの代わりに、値をテストすることができます$.validator.addMethod("valueNotEquals", function(value, element, arg){ return return arg != jQuery(element).find('option:selected').text(); }, "Value must not equal arg.");
パブロ・SGパチェコ

11
将来の読者を助けるために:SelectNameがどこにあるかは、id属性の値ではなく、name属性の値を意味します。JSで作業する場合、通常は名前ではなくIDを使用するため、これは少し混乱します。こちらのドキュメントをご覧ください:「ルール(デフォルト:ルールはマークアップ(クラス、属性、データ)から読み取られます)タイプ:オブジェクトキー/値のペアでカスタムルールを定義します。キーは要素の名前です」
Dror

239

より簡単なソリューションの概要を以下に示します: 選択ボックスの検証

値を空にして、必要な属性を追加します

<select id="select" class="required">
<option value="">Choose an option</option> 
<option value="option1">Option1</option>
<option value="option2">Option2</option>
<option value="option3">Option3</option>
</select>

11
ただし、オプションに空の値を指定する必要があります-常に可能または望ましいとは限りません
Muleskinner '11

4
元の投稿者が「ルール」を使用することを明確に要求しているため、これは受け入れられた回答ではありません。これは、検証コンストラクターに供給されるオプションであり、マークアップにはありません。マークアップを変更する余裕がない場合があります。(そして個人的には、ロジックをマークアップに
含めたく

3
@MasonHoutzロジックがvalue = ""またはvalue = "default"を期待するかどうかにかかわらず、マークアップ内のロジックのままです
billrichards


30

最小ルールを使用

最初のオプション値を0に設定します

'selectName':{min:1}

最初の値は固定されています(この値に対していくつかのバックエンドロジックがあります)
SiberianGuy

9

validate[required]この選択のクラスとして配置し、次にvalue = ""でオプションを配置するだけです

例えば:

<select class="validate[required]">
  <option value="">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

7

質問がなされたとき(2010)にプラグインがどのようだったかはわかりませんが、今日同じ問題に直面し、次のように解決しました。

  1. 選択タグに名前属性を付けます。たとえばこの場合

    <select name="myselect">

  2. タグオプションのvalue = "default"属性を使用する代わりに、Andrew Coatsの提案に従って、デフォルトオプションを無効にするか、value = ""を設定します。

    <option disabled="disabled">Choose...</option>

    または

    <option value="">Choose...</option>

  3. プラグイン検証ルールを設定する

    $( "#YOUR_FORM_ID" ).validate({ rules: { myselect: { required: true } } });

    または

    <select name="myselect" class="required">

Obs:Andrew Coatsのソリューションは、フォームに選択が1つしかない場合にのみ機能します。彼のソリューションが複数のselectで機能するようにしたい場合は、selectに名前属性を追加します。

それが役に立てば幸い!:)


1
要するに、追加requiredする属性を<select>タグと追加disabled最初に属性を<option>(または有するつのタグselectedがある場合、属性)
スティーブン

4

シンプルで理解しやすい例を次に示します。

   <select class="design" id="sel" name="subject">
        <option value="0">- Please Select -</option>
        <option value="1"> Example1 </option>
        <option value="2"> Example2 </option>
        <option value="3"> Example3 </option>
        <option value="4"> Example4 </option>
   </select>

    <label class="error" id="select_error" style="color:#FC2727"><b> Warning : You have to Select One Item.</b></label><td>

    <input type="submit" name="sub" value="Gönder" class="">

jQuery:

jQuery(function() {  

jQuery('.error').hide(); // Hide Warning Label. 

jQuery("input[name=sub]").on("click", function() {

   var returnvalue;

   if(jQuery("select[name=subject]").val() == 0) {

        jQuery("label#select_error").show(); // show Warning 
        jQuery("select#sel").focus();  // Focus the select box      
        returnvalue=false;   

}

return returnvalue;

});
      });  // you can change jQuery with $

2
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>

 <form id="myform"> 
       <select class="form-control" name="user_type">
        <option value="">Select</option>
        <option value="2">1</option>
        <option value="3">2</option>
        </select>
       </form>


<script>
  $('#myform').validate({ // initialize the plugin
            rules: {
          user_type:{ required: true},
         }
      });
</script>

選択値は空白になります


2
このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明コメントを混同しないようにしてください。これにより、コードと説明の両方が読みにくくなります。
Filnor、

1

これは簡単です。選択フィールドの値を取得する必要があり、「デフォルト」にすることはできません。

if($('select').val()=='default'){
    alert('Please, choose an option');
    return false;
}

1

@JMPで言及したソリューションは、少しの変更で私の場合で働いていた:私は、使用element.valueの代わりvalueaddmethod

$.validator.addMethod("valueNotEquals", function(value, element, arg){
    // I use element.value instead value here, value parameter was always null
    return arg != element.value; 
}, "Value must not equal arg.");

// configure your validation
$("form").validate({
    rules: {
        SelectName: { valueNotEquals: "0" }
    },
    messages: {
        SelectName: { valueNotEquals: "Please select an item!" }
    }  
});

ここに特別なケースがあるかもしれませんが、原因を突き止めていませんでした。ただし、@ JMPのソリューションは通常のケースで機能します。


0

選択した「qualifica」を検証する方法

$(document).ready(function(){

    $('.validateForm').validate({
        rules: {
            fullname: 'required',
            ragionesociale: 'required',
            partitaiva: 'required',
            recapitotelefonico: 'required',
            qualifica: 'required',
            email: {
                required: true,
                email: true
            },
        },
        submitHandler: function(form) {

            var fullname = $('#fullname').val(),
                            ragionesociale = $('#ragionesociale').val(),
                            partitaiva = $('#partitaiva').val(),
                            email = $('#email').val(),
                            recapitotelefonico = $('#recapitotelefonico').val(),
                            qualifica = $('#qualifica').val(),
                            dataString = 'fullname=' + fullname + '&ragionesociale=' + ragionesociale + '&partitaiva=' + partitaiva + '&email=' + email + '&recapitotelefonico=' + recapitotelefonico + '&qualifica=' + qualifica;

            $.ajax({
                type: "POST",
                url: "util/sender.php",
                data: dataString,
                success: function() {

                    window.location.replace("./thank-you-page.php");


                }
            });
            return false;
        }
    });

});

3
Stack Overflowへようこそ!このコードスニペットをありがとうございます。このコードスニペットは、短期間の限定的なヘルプを提供する場合があります。適切な説明は、なぜこれが問題の優れた解決策であるを示すことにより、長期的な価値を大幅に改善し、他の同様の質問を持つ将来の読者にとってさらに役立つでしょう。回答を編集して、仮定を含めて説明を追加してください。
Toby Speight 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.