1

我已经尝试了很多不同的组合,但它们似乎都无法正常工作,我知道它必须与我的语法有关......

基本上,我有一排复选框。十月至三月。如果仅选中一个复选框,并且其中一个复选框是十月或三月,则触发。

这是我的代码。(我已经能够正确地抓住 noofmonths 了。)

if (noofmonths == "1" && ( $('#month_oct:checked') || $('#month_mar:checked') )) {
        tempbase = tempbase + 200;
    }
alert(tempbase);

我遇到的问题是它似乎并不关心我检查了几个月。无论哪个月,我总是添加 200.... noofmonths 确实可以正常工作,因为如果我选中了多个复选框,这不会触发。

我在这里想念什么?感谢您的帮助!

4

4 回答 4

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属性?),然后给特殊的复选框(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。

于 2012-08-11T13:13:56.817 回答
1

您可以使用该length属性:

var len = $('#month_oct:checked, #month_mar:checked').length;
if (noofmonths == "1" && len > 0) {
    tempbase = tempbase + 200;
}

演示

于 2012-08-11T13:13:46.643 回答
0

您必须测试匹配查询的长度。

if (noofmonths == "1" && ( $('#month_oct:checked').length || $('#month_mar:checked').length )) {
于 2012-08-11T13:13:38.640 回答
0

您只是在选择复选框,而不是检查它们是否真的被选中。

if (noofmonths == "1" && ( $('#month_oct')[0].checked || $('#month_mar')[0].checked )) {
    tempbase = tempbase + 200;
}

or$('#month_oct').is(':checked');也会返回一个布尔值,或者您可以实际选中复选框,并检查选择器是否有长度,如其他答案中所示。

于 2012-08-11T13:15:16.473 回答