jQuery Validate Required Select


146

我正在尝试使用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>

我希望验证插件使用“默认”值为空。


放置一些代码段,以便我们提供帮助。

Answers:


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.");
Pablo SG Pacheco 2014年

11
为了帮助将来的读者:SelectName在哪里,它的意思是name属性的值而不是id属性的值。这有点令人困惑,因为在JS中工作时,通常使用id而不使用name。请参阅此处的文档:“规则(默认:从标记(类,属性,数据)读取规则)类型:对象定义自定义规则的键/值对。键是元素的名称
2014年

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
但是,你必须给你的选项为空值-并不总是可能或wishable
Muleskinner

4
这不应该是公认的答案,因为原始的发帖人特别要求使用“规则”,该规则是提供给validate构造函数的选项,并且不存在于标记中。有时,您没有修改标记的奢望。(就我个人而言,我只是不想在标记中加入逻辑。)
Mason Houtz 2012年

3
@MasonHoutz仍然是标记中的逻辑,无论逻辑期望value =“”还是value =“ default”
billrichards 2014年



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
简而言之,将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
尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。也请尽量不要在代码中加入解释性注释,这会降低代码和解释的可读性!
菲诺

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

如何验证选择的“资格”它有3选择

$(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 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.