如何在使用jQuery的表单中验证下拉菜单?

问题描述:

我已经从Treehouse和CodeSchool等工具中学习了大部分jQuery,所以这些材质可能看起来很熟悉。如何在使用jQuery的表单中验证下拉菜单?

我试图验证表单内的下拉之前提交按钮激活。但是,每当我做出选择并输入内容时,提交按钮都不会激活。

这里是什么,我现在所拥有的一个例子:

function containsBlanks() { 
 
    var blanks = $('.required').map(function() { 
 
    return $(this).val() === ""; 
 
    }); 
 
    return $.inArray(true, blanks) != -1; 
 
} 
 

 
function FilledIn() { 
 
    if (containsBlanks()) { 
 
    $('#submit_btn').attr('disabled', 'disabled'); 
 
    } else { 
 
    $('#submit_btn').removeAttr('disabled'); 
 
    } 
 
} 
 
FilledIn();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script> 
 
<form id="basic_form"> 
 
    <select name="lighterColors" id="lighterColors" class="required"> 
 
    <option value="">--Select--</option> 
 
    <option value="Blue">Blue</option> 
 
    <option value="Red">Red</option> 
 
    </select> 
 

 
    <br> 
 

 
    <label for="name"></label> 
 
    <input type="text" id="name" class="required"> 
 
    <br> 
 
    <input id="submit_btn" type="submit"> 
 
</form>

我已经改变了选择选项的值,以任何随机值,但仍然无法删除的submit_btn的ATTR 。请帮助任何建议。

+0

是你的函数'FilledIn()'上的document.ready运行。如果是应用在'元素的focus'使用地图的变更事件istead – 2015-04-06 04:41:39

+0

尝试 - 。VAR空白= $(“需要”)变化(函数(){ – stanze 2015-04-06 04:42:34

下面的插件可以这样调用:$('.requiredSelects').validateSelects('#submit_btn');

哪里.requiredSelects对于那些必须填写并#submit_btn是,除非填写了所有字段中应禁用按钮选择的任何元素的选择

(function ($) { 
 
    $.fn.validateSelects = function (btn) { 
 
     var elements = this; 
 
     var invalid = 0; 
 
     // make sure to return here so the pulgin is chainable 
 
     return elements.change(function() { // bind to change event 
 
      invalid = 0; 
 
      elements.each(function() { 
 
       if ($(this).val() === "") invalid++; 
 
      }); 
 
      invalid > 0 ? $(btn).attr('disabled', 'disabled') : $(btn).removeAttr('disabled'); 
 
     }); 
 
    }; 
 
}(jQuery)); 
 

 

 

 
$('.requiredSelects').validateSelects('#submit_btn');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script> 
 
<form id="basic_form"> 
 
    <select name="lighterColors" id="lighterColors" class="requiredSelects"> 
 
     <option value="">--Select--</option> 
 
     <option value="Blue">Blue</option> 
 
     <option value="Red">Red</option> 
 
    </select> 
 
    <select name="lighterColors" id="lighterColors" class="requiredSelects"> 
 
     <option value="">--Select--</option> 
 
     <option value="Blue">Blue</option> 
 
     <option value="Red">Red</option> 
 
    </select> 
 
    <br> 
 
    <label for="name"></label> 
 
    <input type="text" id="name" class="required" /> 
 
    <br> 
 
    <input id="submit_btn" type="submit" disabled /> 
 
</form>

+0

感谢高兴我得到了它:-) 工作难道是正确地将requiredSelects类添加到输入字段,或者更好的做法是创建它自己的函数并检查每个函数是否在第三个函数中返回true语句? – user3623883 2015-04-07 03:15:39

+0

,因为它被写入,它也可以用于文本输入或textareas,正如你猜测的那样,只给他们所有的同类。 Id将该类重命名为“requiredInputs”或其他东西。但是,如果您要进行大量验证,则可能需要查看http://jqueryvalidation.org/这样的验证库。 – DelightedD0D 2015-04-07 14:19:02