IE8和Android的Jquery问题

时间:2014-07-01 18:17:52

标签: javascript android jquery internet-explorer-8

在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解决了所有问题!我的坏!

1 个答案:

答案 0 :(得分:0)

要评估单个复选框,请尝试使用

var method = $("#fedex_method").prop("checked");

评估多个复选框,例如

var method = $("#fedex_method:checked").length;

或(因为您不应该有多个具有相同ID的复选框):

var method = $("input:checkbox[name=fedex_method]:checked").length;

根据jquery documentation

  

根据W3C表单规范,checked属性是一个布尔属性,这意味着如果属性完全存在则相应的属性为true - 例如,即使属性没有值或设置为空字符串价值甚至是“假”。所有布尔属性都是如此。

     

尽管如此,要记住关于checked属性的最重要的概念是它与checked属性不对应。该属性实际上对应于defaultChecked属性,应仅用于设置复选框的初始值。 checked属性值不会随复选框的状态而改变,而checked属性则会改变。因此,确定是否选中复选框的跨浏览器兼容方式是使用属性:

if ( elem.checked )
if ( $( elem ).prop( "checked" ) )
if ( $( elem ).is( ":checked" ) )