从根本上说,css("display")
确实有效,所以正在发生其他事情。
我怀疑两件事之一:
您正在制作的复选框display: none
never checked
,因此您不会在each
循环中看到它们。
您不是在制作 checkboxes display: none
,而是对它们的某些祖先元素执行此操作。在这种情况下,$(this).is(":visible")
这就是您要查找的内容。
这是#2 的示例:Live Copy | 直播源
<div id="ancestor">
<input type="checkbox" checked>
</div>
<script>
$("#ancestor").css("display", "none");
console.log("display property is now: " +
$("input:checkbox:checked").css("display"));
console.log("visible tells us what's going on: " +
$("input:checkbox:checked").is(":visible"));
</script>
...输出:
显示属性现在是:inline-block
可见告诉我们发生了什么:假
将其应用于您的代码:
function pass_QR() {
var i = 0;
var array = [];
$("input:checkbox:checked").each(function () {
i++;
alert($(this).css('display'));
if ($(this).val() !== 0 && $(this).is(':visible')) {
// Change is here -----------------^^^^^^^^^^^^^^
array.push($(this).val());
}
});
}
旁注:每次调用时$()
,jQuery 都必须做一些工作。当您发现自己在同一范围内重复调用它时,最好只做一次:
function pass_QR() {
var i = 0;
var array = [];
$("input:checkbox:checked").each(function () {
var $this = $(this); // <=== Once
i++;
alert($this.css('display'));
if ($this.val() !== 0 && $this.is(':visible')) {
// Other change is here -------^^^^^^^^^^^^^^
array.push($this.val());
}
});
}