问题是$('someselector')
即使没有元素匹配,它也总是返回一个 jQuery 对象'someselector'
。任何对象,即使是空的,都是“真实的”。
你应该做的是:
if (noofmonths == "1" && ( $('#month_oct:checked').length > 0
|| $('#month_mar:checked').length > 0 )) {
// OR
if (noofmonths == "1" && ( $('#month_oct').is(':checked')
|| $('#month_mar').is(':checked')) {
当没有元素匹配时,生成的 jQuery 对象length
将是0
. .is()
另一方面,该方法返回一个布尔值。
话虽如此,我会考虑一种不同的方式来获得这种效果。我会给整行复选框一个公共类(除非它们已经共享一个name
属性?),然后给特殊的复选框(Oct & Mar)一个额外的类:
<input type="checkbox" class="month" value="Jan">
...
<input type="checkbox" class="month oneonly" value="Mar">
...
因为那时你可以这样做:
var $checked = $(".month:checked");
if ($checked.length === 1 && $checked.hasClass("oneonly")) {
...
也就是说,首先将所有选中的框检索到$checked
变量中,然后如果数字为 1 并且该数字具有将其标记为 3 月或 10 月的类...这样,如果将来 7 月突然变得“特别”,那么你d 只需在 html 中将“oneonly”类(或任何您喜欢的名称)添加到 July,您根本不需要更改 JavaScript。