问题
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="/js/jquery-1.12.4.min.js"></script>
<script>
$(function () {
$('input[type="radio"]').change(function(){
var bool = $(this).attr("checked");
//alert(typeof(this));
alert(typeof(bool));
if(bool){
$("p").text("你选择的是:" + $(this).val());
}
})
})
</script>
</head>
<body>
<div>
<label><input type="radio" name="fruit" value="苹果" />苹果</label>
<label><input type="radio" name="fruit" value="香蕉" />香蕉</label>
<label><input type="radio" name="fruit" value="西瓜" />西瓜</label>
</div>
<p></p>
</body>
</html>
选择radio后发现typeof(bool)是underfined,也就是attr方法不能获得这个checked属性。
解决
把attr改为prop就行。
更多方法参考这篇博客。
总结
prop()方法跟attr()方法相似,都是用来获取或设置元素的HTML属性的。不过两者也有着本质上的区别。
jQuery官方建议:具有true和false这两种取值的属性,如checked、selected或disabled等建议使用prop()来操作,而其他的属性都建议使用attr()来操作。
prop()方法的出现就是为了弥补attr()方法在表单属性操作中的不足。记住一句话就行了:如果某个属性没法使用attr()获取或设置,改换prop()就可以搞定。
该博客讨论了在jQuery中attr()和prop()方法的区别。当尝试获取或设置表单元素的属性,如checked、selected等,应当使用prop()而不是attr()。attr()适合用于处理一般的HTML属性,而prop()专门设计来处理表单属性。jQuery官方推荐使用prop()来操作具有真值假值的属性,因为attr()可能无法正确获取这些属性的状态。
515

被折叠的 条评论
为什么被折叠?



