js/jquery比较的正确语法?

Pau*_*nak 1 javascript syntax jquery

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

基本上,我有一排复选框.10月到3月的月份.如果只选中一个复选框,其中一个复选框是十月或三月,然后触发.

这是我的代码.(我已经能够正确地获取noofmonth.)

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

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

我在这里错过了什么?我很感激帮助!

nnn*_*nnn 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')) {
Run Code Online (Sandbox Code Playgroud)

当没有元素匹配生成的jQuery对象length0..is()另一方面,该方法返回一个布尔值.

话虽如此,我会考虑采用不同的方式来达到这种效果.我会给整行复选框一个公共类(除非他们已经共享一个name属性?)然后给特殊的(10月和3月)一个额外的类:

<input type="checkbox" class="month" value="Jan">
...
<input type="checkbox" class="month oneonly" value="Mar">
...
Run Code Online (Sandbox Code Playgroud)

因为那时你可以这样做:

var $checked = $(".month:checked");
if ($checked.length === 1 && $checked.hasClass("oneonly")) {
    ...
Run Code Online (Sandbox Code Playgroud)

也就是说,首先将所有选中的复选框检索到$checked变量中,然后如果数字为1并且该类具有将其标记为3月或10月的类...那么如果将来7月突然变得"特殊"那么你' d只需要在html中将"oneonly"类(或任何你喜欢的名字)添加到7月,你根本不需要改变你的JavaScript.