在IE8和一些Android版本上遇到以下代码的问题。变量“method”总是未设置,即使检查了它引用的对象,也会抛出警报。除了IE8和可能的IE9之外,大多数其他浏览器都可以使用它,以及一些Android操作系统(还没有确切地确定哪些浏览器)。
$(document).ready(function() {
$('#choose_shipper').click(function(){
var method = $('#fedex_method:checked').val();
if (!method){
alert('Please select a shipping option');
}else{
DO SOMETHING ELSE HERE
}
});
});
EDIT 简单的答案,愚蠢的习惯......我正在使用同一个id的多个实例...旧的浏览器不喜欢这样,并将所有重复的实例视为不存在。所以!将“fedex_method”从ID更改为CLASS解决了所有问题!我的坏!
答案 0 :(得分:0)
要评估单个复选框,请尝试使用
var method = $("#fedex_method").prop("checked");
评估多个复选框,例如
var method = $("#fedex_method:checked").length;
或(因为您不应该有多个具有相同ID的复选框):
var method = $("input:checkbox[name=fedex_method]:checked").length;
根据W3C表单规范,checked属性是一个布尔属性,这意味着如果属性完全存在则相应的属性为true - 例如,即使属性没有值或设置为空字符串价值甚至是“假”。所有布尔属性都是如此。
尽管如此,要记住关于checked属性的最重要的概念是它与checked属性不对应。该属性实际上对应于defaultChecked属性,应仅用于设置复选框的初始值。 checked属性值不会随复选框的状态而改变,而checked属性则会改变。因此,确定是否选中复选框的跨浏览器兼容方式是使用属性:
if ( elem.checked ) if ( $( elem ).prop( "checked" ) ) if ( $( elem ).is( ":checked" ) )