jQuery Validate Required Select

Sib*_*Guy 142 jquery jquery-validate

我正在尝试使用jQuery Validate插件验证html select元素.我将"required"规则设置为true,但它总是通过验证,因为默认情况下会选择零索引.有没有办法定义所需规则使用的空值?

UPD.例.想象一下,我们有以下html控件:

<select>
  <option value="default">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我希望Validation插件使用"default"值为空.

小智 235

此处概述了一种更简单的解决方案: 验证选择框

使值为空并添加必需的属性

<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>
Run Code Online (Sandbox Code Playgroud)

  • 但是你必须给你的选项一个空值 - 并不总是可能或可见 (10认同)
  • 这不应该是可接受的答案,因为原始海报特别要求使用"规则",这是一个提供给验证构造函数的选项,而不是标记中的选项.有时您无法修改标记.(而且就个人而言,我只是不想将逻辑放在标记中.) (4认同)
  • @MasonHoutz,标记仍然是逻辑,无论逻辑期望值=“”还是值=“ default” (3认同)

JMP*_*JMP 210

你可以写自己的规则!

 // 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!" }
  }  
 });
Run Code Online (Sandbox Code Playgroud)

  • 为了帮助未来的读者:在哪里说SelectName它的意思是name属性的值而不是id属性的值.这有点令人困惑,因为在JS中工作时,通常使用id而不是名称.请参阅文档[此处](http://jqueryvalidation.org/validate):"规则(默认:从标记中读取规则(类,属性,数据))类型:对象定义自定义规则的键/值对.键是**元素的名称**" (10认同)
  • 您可以测试选定的文本而不是值,如下所示:`$.validator.addMethod("valueNotEquals", function(value, element, arg){ return return arg != jQuery(element).find('option:selected' ).text(); }, "值不能等于arg。");` (2认同)

Bas*_*ANI 40

最简单的解决方案

只需将第一个选项的值设置为空字符串即可 value=""

<option value="">Choose...</option>
Run Code Online (Sandbox Code Playgroud)

jquery验证 required规则 will work


Fun*_*ude 30

使用最小规则

将第一个选项值设置为0

'selectName':{min:1}
Run Code Online (Sandbox Code Playgroud)


oma*_*ave 8

你只需要把validate[required]这个选择的类放在一起,然后放一个值为""的选项

例如:

<select class="validate[required]">
  <option value="">Choose...</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>
Run Code Online (Sandbox Code Playgroud)


小智 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的解决方案只有在您的表单中只有一个选择时才有效.如果您希望他的解决方案与多个选项一起使用,请为您的选择添加名称属性.

希望能帮助到你!:)


fth*_*ins 6

<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>
<input type="submit" name="sub" value="Gönder" class="">
Run Code Online (Sandbox Code Playgroud)

查询:

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 $
Run Code Online (Sandbox Code Playgroud)