2016-07-22 7 views
2

必要なルールをドロップダウンに適用しようとして失敗した(はい、私は空の値を持つオプションを持っていました)、ドロップダウンリストに適用するカスタムルールを作成しました。アラートを追加して発見したように、jQuery Validatorは<select>タグを参照していません。参照先はselectFruitResultです。代わりに、それ以上のものを見ています:selectTypeResult。私は、組み込みの必須ルールを単に使用するだけで、間違った要素も見ていると思います。どうして?私はここで間違って何をしていますか?jQuery Validatorルールが間違った要素に適用されます

HTML:

<form id="fruitResultForm"> 
     <div class="form-group"> 
       <label for="selectTypeResult">Select a fruit by Type:</label> 
       <select class="form-control" id="selectTypeResult" style="width: 300px;"> 
       <option>APPLES</option> 
       <option>ORANGES</option> 
       <option>CHERRIES</option> 
       <option>GRAPES</option> 
       </select> 
      </div> 
      <div class="form-group" id="selectFruitDiv"> 
       <select class="form-control" id="selectFruitResult" style="width: 300px;"></select> 
      </div> 
      </div> 
</form> 

のJavaScript(バリデータが初期化され、form.validate()が別のファイルに呼び出されることに注意してください):私はここで何が問題を

$(document).ready(function() { 

$("#selectTypeResult").on("change", function(e){ 
    var optionSelected = $('#selectTypeResult').find('option:selected'); 
    var groupType = optionSelected.val(); 
    $.ajax({ 
     url: "/getfruit.json, 
     type: "GET", 
     success: function (data) { 
      // Clear options in selectFruit dropdown. 
      $("#selectFruitResult").empty(); 

      // Populate new options in selectFruit dropdown. 
      if (data.fruit.length > 0) { 
       for (var i = 0; i < data.fruit.length; i++) { 
        $("#selectFruitResult").append("<option value='" + data.fruit[i].categoryId + "'>" + data.fruit[i].name + "</option>"); 
       } 
      } else { 
       $("#selectFruitResult").append('<option value="None">No existing fruits of this type</option>'); 
       jQuery.validator.addMethod("emptyFruit", function(value, element) { 
        alert(value); 
        return value != "None"; 
       }, 'Please select an existing fruit'); 
       $("#selectFruitResult").rules('add', 'emptyFruit'); 
      } 

     } 
    }); 
}); 

答えて

3

をやっていますか?

select要素のいずれも、name属性を含んでいません。 jQuery Validateプラグインでは、検証の対象となるすべての要素に一意のname属性が含まれていることが必須です。プラグインがすべてを追跡する方法です。このための回避策はありません。

<select class="form-control" name="selectFruitResult" id="selectFruitResult" style="width: 300px;"> 

は今限り、最初のoptionvalue=''含まれているとして、あなたはカスタムルールを使用する必要はありません、そして予想通り、内蔵required機能します。

関連する問題