我已经尝试了很多不同的组合,它们似乎都无法正常工作,我知道它必须与我的语法有关....
基本上,我有一排复选框。 10月到3月的月份。如果只选中一个复选框,其中一个复选框是10月或3月,然后触发。
这是我的代码。 (我已经能够正确地获取noofmonth。)
if (noofmonths == "1" && ( $('#month_oct:checked') || $('#month_mar:checked') )) {
tempbase = tempbase + 200;
}
alert(tempbase);
我遇到的问题是它似乎并不关心我检查了几个月。无论哪个月,我总是添加200 .... noofmonths正常工作,因为如果我检查了多个复选框,这不会触发。
我在这里缺少什么?我很感激帮助!
答案 0 :(得分:5)
问题是$('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
属性?)然后给特殊的(10月和3月)一个额外的类:
<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月突然变得“特别”,你只需要在html中添加“oneonly”类(或任何你喜欢的名字)到7月,你根本不需要改变你的JavaScript。
答案 1 :(得分:1)
您可以使用length
属性:
var len = $('#month_oct:checked, #month_mar:checked').length;
if (noofmonths == "1" && len > 0) {
tempbase = tempbase + 200;
}
答案 2 :(得分:0)
您必须测试匹配查询的长度。
if (noofmonths == "1" && ( $('#month_oct:checked').length || $('#month_mar:checked').length )) {
答案 3 :(得分:0)
您只是选中复选框,而不是检查它们是否实际被检查过。
if (noofmonths == "1" && ( $('#month_oct')[0].checked || $('#month_mar')[0].checked )) {
tempbase = tempbase + 200;
}
或$('#month_oct').is(':checked');
也会返回一个布尔值,或者您实际上可以选中复选框,并检查选择器是否有长度,如同其他答案一样。