2011-12-16 83 views
11

信息:jQuery的1.6.0 HTML复选框:jQuery的复选框总是返回 '未定义'

首先,我做了一定的jQuery加载:

if(jQuery) { 
    alert("loaded"); 
} 

这是情况下,它被加载。 然后immidiately后,该行我使用:

var returnvalue = jQuery("#mycheckbox").attr("checked"); 
alert(returnvalue); 

此,出于某种原因,总是提示“未定义”。我100%确定ID存在。我也尝试了以下方法:

jQuery("#mycheckbox").find('input[type="checkbox"]').each(function(){ 
    alert("foo"); 
    if (jQuery(this).is(":checked")) 
     ReturnVal = true; 
}); 

但是,这甚至不会弹出警报。

我在做什么错?我是一个jQuery或Javascript专家,但这应该工作......对吧?

编辑: 我已经试过:

jQuery(document).ready(function() { 
    alert(id); 
    var returnvalue = jQuery("#" . id).prop("checked"); 
    alert(returnvalue); 
}); 

警报(ID)给了我正确的ID,但警报(返回值)返回undefined。

我也试过:

if(jQuery) { 
    alert("loaded"); 
} 
jQuery(function() { 
    alert(id); 
    var returnvalue = jQuery("#" . id).attr("checked"); 
    alert(returnvalue); 
}); 

同样的结果

EDIT2: 使用.prop,并用 '+' 来代替附加标识后 '' (PHP的习惯),它的工作原理。感谢大家的帮助!

+1

`jQuery(“#”。id)`是错的。你要求`“#”`字符串的`id`属性。 – RightSaidFred 2011-12-16 23:21:10

+0

该死的,你是对的!这是我第一次使用javascript,我一直使用PHP,所以我习惯了'。'。你是完全正确的,这甚至解决了我的问题,非常感谢你! – pbond 2011-12-16 23:23:51

回答

13
  • 如果你正在使用jQuery 1.6或更高版本,使用的prop()代替attr()

var returnvalue = jQuery("#mycheckbox").prop("checked"); 

这是因为如果你没有包括明确checked与属性元素,则该属性为undefined,但该属性将具有其默认值。


  • 你需要消除.find()
jQuery("#mycheckbox").each(function(){ 
    alert("foo"); 
    if (jQuery(this).is(":checked")) 
     ReturnVal = true; 
}); 

,包括问题的HTML将是有益的。

4

试试这个:

if(jQuery) { 
    alert("loaded"); 
} 
$(function() { 
    var returnvalue = $("#mycheckbox").attr("checked"); 
    alert(returnvalue); 
}); 

更新

如果你的脚本是在页面的顶部,HTML被加载之前执行。在那段时间,attr('checked')是未定义的。

通过将代码包装到自执行的匿名函数$(function(){...})中,您的代码将在HTML加载后执行。

回答评论

您的代码:

function isChecked(id) 
{ 
    if(jQuery) { alert("loaded"); } 
    $(function() { 
     alert(id); 
     var returnvalue = $("#" + id).attr("checked"); 
     alert(returnvalue); 
    }); 
} 

试试这个。它警告什么?

function isChecked(id) 
{ 
    if(jQuery) { alert("loaded"); } 
    alert(id); 
    alert('there are this many elements with matching id: ' + $("#" . id).length); 
    var returnvalue = $("#" + id).attr("checked"); 
    alert(returnvalue); 
} 

是否第三警告说:“有此相匹配的ID许多元素:0”?

2

使用.prop$('#checkbox1').prop('checked'),jQuery 1。6 +

关于布尔属性,可以考虑由HTML标记<input type="checkbox" checked="checked" />限定的DOM元素,并假定它是在名为ELEM一个JavaScript变量:

elem.checked true (Boolean) Will change with checkbox state 
$(elem).prop("checked") true (Boolean) Will change with checkbox state 
elem.getAttribute("checked") "checked" (String) Initial state of the checkbox; does not change 
$(elem).attr("checked")(1.6) "checked" (String) Initial state of the checkbox; does not change 
$(elem).attr("checked")(1.6.1+) "checked" (String) Will change with checkbox state 
$(elem).attr("checked")(pre-1.6) true (Boolean) Changed with checkbox state 

根据W3C形式说明书中,所检查的属性是一个布尔属性,这意味着如果该属性全部存在,则相应的属性为真,即使例如该属性没有值或空字符串值。优选的跨浏览器兼容的方式,以确定是否一个复选框被选中是使用以下之一来检查“truthy”值的元素的属性:

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

如果使用jQuery 1.6,代码if ($(elem).attr("checked"))将检索实际内容属性,该属性在复选框被选中并且未被选中时不会改变。它仅用于存储已检查属性的默认值或初始值。为了保持向后兼容性,jQuery 1.6.1+中的.attr()方法将为您检索和更新属性,因此不需要将布尔属性的代码更改为.prop()。尽管如此,获取选中值的首选方法是使用上面列出的选项之一。要查看最新的jQuery如何工作,请在下面的示例中选中/取消选中复选框。