2011-03-09 57 views
0

我想要1)如果(“#one”)被选中并且(“#two”)未被选中,则显示警报。然后显示不同的警报,如果两者都被选中。我的第一部分是正确的,然后在第二部分显示这两个警报。2条件可以这样组合吗?

$("#one").click(function() { 
    if($(this).is(":checked") && $("#two").is(":not(:checked)")) { 
    alert("foo"); 
    } else { 
     if($(this).is(":checked") && $("#two").is(":checked")) { 
      alert("foo foo"); 
     } 
    } 
}); 
+1

是的,他们可以... – amosrivera

回答

3

我觉得你太过于复杂了。

$("#one").click(function() { 
    var thisIsChecked = this.checked, 
     twoisChecked = $('#two').get(0).checked; 

    if(thisIsChecked) { 
     if (twoisChecked) { 
      alert('foo foo'); // <---- 
     }      //  | note the switch 
     else {     //  | 
      alert('foo');  // <---- 
     } 
    } 
}); 

参见:When to use Vanilla JavaScript vs. jQuery?

+0

你能解释逗号分隔变量吗?和.get(0)这是干什么的? –

+0

@Dirty:分隔的逗号或多或少等价于单独的'var'语句。有些人,如[Douglas Crockford](http://www.jslint.com/lint.html),主张每个函数使用一个'var'语句。看[这个问题](http://stackoverflow.com/questions/810313/)。 ['.get()'](http://api.jquery.com/get)调用返回底层的DOM元素(不是jQuery元素),因此您可以访问'.checked'属性而不是多做一个如果没有必要,可以使用昂贵的'.attr()'调用。 –

+0

非常好,谢谢。我会尽力并入这个。我真的很感激这个男人。 –

1
$("#one").click(function() { 
    if(this.checked) { 
     var $two = $("#two"); 
     if (!$two.is(":checked")) { 
      alert("foo"); 
     } else { 
      alert("foo foo"); 
     } 
    } 
}); 
1

它看起来好像没什么问题。这在这里的例子:http://jsfiddle.net/andypaxo/9vJGL/

这是你想要的行为?

+0

有一个选择器错了,我想可以开始。 thx @andypaxo! –

+1

@Dirty:你还在使事情变得更加复杂(效率更低)! –

+0

@Matt - 我知道,我正在尝试的人。哪种方法最好?我对三元运算符很熟悉,但是我不使用香草警报,而是使用jAlert对话框,所以这些对话框都没有了。 –

1

JSfiddle with solution

HTML:

<form> 
    <input id="one" type="checkbox" /> 
    <input id="two" type="checkbox" /> 
</form> 

JS:

var one = $("#one"); 
var two = $("#two"); 

one.click(function() {  
    if (one.is(":checked")) { 
     if (two.is(":checked")) { 
      alert("foo foo"); 
     } else { 
      alert("foo"); 
     } 
    } 
}); 
+0

尝试它,但我需要变量是本地的,因为会有很多这些 –

+0

你可以这样写,我只让它们变量来缓存查找:'$(“#one”)。click(function (){){(this).is(“:checked”)){ if($(“#two”)。(“:checked”)){ alert(“foo foo”); } else { alert(“foo”); } } });' –

1

我重构了一下摆脱嵌套如果和干燥了一点东西的:

$("#one").click(function() { 
    if(!this.checked) { return } 
    var message = $("#two").is(':checked') ? 'foo foo' : 'foo'; 
    alert(message) 
}); 
+0

不错,三元运算符,我喜欢这个。 thx队友。 –