JQuery if语句
我已经写了一些JQuery代码来遍历ASP.Net网页上的一些复选框,并且发现嵌入在$ .each函数中的if语句有2个非常奇怪的问题。代码选择我的复选框就好了,当代码遍历$ .each函数时,我可以清楚地看到objValue.checked是true或false,具体取决于是否检查复选框。我看到的问题是:1)它总是落入我的if语句中(即使objValue.checked的值为false),2)我的availableInstalls变量的值永远不会递减,即使我可以看到调试模式,它击中“availableInstalls = availableInstalls - 1”行代码。任何人都知道可能会导致这种行为?JQuery if语句
$(document).ready(function() {
$(".installsoftwarecb").click(function() {
var availableInstalls = 10;
var checkBoxes = $(".installsoftwarecb input[type='checkbox']");
$.each(
checkBoxes, function(intIndex, objValue) {
if (objValue.checked) {
availableInstalls = availableInstalls - 1;
}
});
});
});
如何写这样的事情:
$(document).ready(function()
{
$(".installsoftwarecb").click(function()
{
//count number of checked items directly.
var availableInstalls = 10 - $('input:checkbox:checked', this).length;
alert(availableInstalls);
}
}
尝试在您的代码中具体。取而代之的if (objValue.checked)
写if (ojValue.checked == true)
如果复选框被选中objValue.checked为true。添加== true只是不需要的额外代码。 – nickytonline 2009-08-20 18:03:49
这真奇怪,它会落入你的条件块即使条件是假的。你可以尝试只选择检查项目开始说起:
var checkBoxes = $(".installsoftwarecb input[type='checkbox']:checked");
代码演示
$(document).ready(function() {
$("#button").click(function() {
var availableInstalls = 10;
$("input:checkbox").each(function() {
if (this.checked) {
availableInstalls = availableInstalls - 1;
}
});
alert(availableInstalls);
});
});
,或者你感冒只需使用一个 “检查”选择器
$("input:checkbox:checked").length; // number of checked checkboxes
你不应该这么做:单选复选框,因为它等同于*:复选框,你应该总是在输入前加上 – 2009-08-20 16:27:42
现在更新。干杯 – 2009-08-20 16:30:35
我想你应该使用jQuery.each而不是$()。each。 (http://docs.jquery.com/Utilities/jQuery.each)。 $()。每个都不需要回调,jQuery.each就是这样做的。
选择器正在工作,但它应该是真正的输入:复选框:检查,而不是检查将检查上下文中的每个单元可能是非常低效的。您可以将其过滤为带有输入的复选框:复选框 - 大部分时间可能都不是什么大问题,但这只是一个好习惯。 – 2009-08-20 16:31:57
正如我在其他评论中写的那样,我同意你和我编辑了我的答案。就个人而言,我认为速度并不重要,但它可以计算单选按钮元素的事实在将来修改HTML时可能会出现bug。 – SolutionYogi 2009-08-20 16:39:13
谢谢你更新你的答案。 +1 :) – 2009-08-20 16:41:10