使用jQuery验证<select>

时间:2017-10-08 17:09:46

标签: jquery html

我有3&lt; select&gt;日,月和年的元素。我试图用jQuery验证它们。 &lt; li class =“pseudo_day”&gt;     &lt; select class =“mod_day”name =“day”&gt;         &lt;选项已禁用所选&gt;日&lt; /选项&gt;         &lt; option value =“1”&gt; 1&lt; / option&gt;         &lt; option value =“2”&gt; 2&lt; / option&gt;         &lt; option value =“3”&gt; 3&lt; / option&gt;         &lt; option value =“4”&gt; 4&lt; / option&gt;         &lt; option value =“5”&gt; 5&lt; / option&gt;         &lt; option value =“6”&gt; 6&lt; / option&gt;         &lt; option value =“7”&gt; 7&lt; / option&gt;         &lt; option value =“8”&gt; 8&lt; / option&gt;         &lt; option value =“9”&gt; 9&lt; / option&gt;         &lt; option value =“10”&gt; 10&lt; / option&gt;     &LT; /选择&GT; &LT; /锂&GT; 像这样: $(“select [name = day],选择[name = month],选择[name = year]”)。on('change',function(){     var select_day = $(“select [name = day]”)。val();     var select_month = $(“select [name = month]”)。val();     var select_year = $(“select [name = year]”)。val();         if(select_day.length!== 0){console.log(“Valid - ”+ select_day); }         else {console.log(“无效!”); } }); 这是我运行jQuery代码时得到的错误: 未捕获的TypeError:无法读取null的属性“length”     在HTMLSelectElement。&lt; anonymous&gt; (new_user.html:242)     在HTMLSelectElement.dispatch(jquery-3.2.1.min.js:3)     在HTMLSelectElement.q.handle(jquery-3.2.1.min.js:3) 我在这做错了什么?

2 个答案:

答案 0 :(得分:1)

如果未选择任何选项select[name=day],则$("select[name=day]").val()null,您会收到错误,因为我们无法读取null的属性'length'。我们可以通过多种方式解决它,但有一种方法可以解决它:

var select_day = $("select[name=day]").val() || '';
var select_month = $("select[name=month]").val() || '';
var select_year = $("select[name=year]").val() || '';

答案 1 :(得分:1)

问题是,在您选择的每个change事件中,您都试图获取所有值。例如,如果您仅更改year,则monthday未定义。然后你试图操纵一天 - select_day.length - 取其长度。你可以使用建议的palash或检查存在和类型

if (select_day && typeof select_day === 'string' ) ...

仅当select_day为非空字符串时才会出现这种情况。