【jQuery】对于复选框操作的attr与prop

这个是在jQuery1.6版本之后出现的鬼东西。受影响的主要有下拉列表select与复选框checkbox。众所周知,在jQuery中可以用attr()取出节点的属性,然而对于checkbox却不是这样了,比如我要取出其是否被选中的属性checked,attr("checked")去取没有选中的复选框是undefinded的,只能取出被选中复选框的属性。这个问题,导致我在一个条件判断中忙活了比较久的事件。查了一下发现,在jQuery1.6版本之后,你取复选框有没有被选中,要用prop

举个例子还说明这个问题,如下代码,设置两行完全一模一样的东西,两按钮对一复选框进行操作,一个行内文本,用来显示Jquery的属性,唯一不同的是一个用了attr属性,一个用了prop属性:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>attr与prop</title>
		<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
	</head>
	<body>
		attr:
		<button id="selected1"/>选中复选框 </button>
		<button id="unselected1"/>不选中复选框 </button>
		<input type="checkbox" id="checkBox1" />
		<span id="tip1"></span><br/>
		prop:
		<button id="selected2"/>选中复选框 </button>
		<button id="unselected2"/>不选中复选框 </button>
		<input type="checkbox" id="checkBox2" />
		<span id="tip2"></span><br/>
	</body>
</html>
<script type="text/javascript">
	$("#selected1").click(function(){
		$("#checkBox1").attr("checked",true);
		$("#tip1").html($("#checkBox1").attr("checked"));
	});
	$("#unselected1").click(function(){
		$("#checkBox1").attr("checked",false);
		$("#tip1").html($("#checkBox1").attr("checked"));
	});
	$("#selected2").click(function(){
		$("#checkBox2").prop("checked",true);
		$("#tip2").html($("#checkBox2").prop("checked"));
	});
	$("#unselected2").click(function(){
		$("#checkBox2").prop("checked",false);
		$("#tip2").html($("#checkBox2").prop("checked"));
	});
</script>

运行效果却得到如下所示,极其令人惊讶的是,虽然同样能够改变复选框的值,使用attr方法去操作的复选框的第一行,其值一直没有改变。无论选中还是没有选中一直是checked的状态,而第二行使用了prop,选中是true,没选中是没有选中的undefinded,这才能真正用于if条件的判断。使用attr取复选框是否被选中,放到if中,只会对头两次选择有效,之后就失效了。因此,以后再jQuery搞复选框,没什么事还是用prop。

jQuery你丫为何各个版本的代码会不同呢?为何不能像Javascript一样,能取就能改呢?

时间: 2024-10-05 07:21:50

【jQuery】对于复选框操作的attr与prop的相关文章

Jquery选择复选框操作

1 <script type="text/javascript"> 2 jQuery(function($){ 3 //全选 4 $("#btn1").click(function(){ 5 $("input[name='checkbox']").attr("checked","true"); 6 }) 7 //取消全选 8 $("#btn2").click(function

【jQuery】复选框的全选、反选,判断哪些复选框被选中

本文与<[JavaScript]复选框的全选.反选,判断哪些复选框被选中>(点击打开链接)为姊妹篇,把里面内容再与jQuery框架中实现一次,同样做到如下的效果: 布局还是同样的布局,只是由于在jQuery框架中,无须再为按钮,指定特定的onclick事件处理函数,直接使用jQuery指定即可: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri

不同版本的jquery的复选框checkbox的相关问题

在尝试写复选框时候遇到一个问题,调试了很久都没调试出来,极其郁闷: IE10,Chrome,FF中,对于选中状态,第一次$('#checkbox').attr('checked',true)可以实现 但是当通过代码清除选中,下次再通过代码 $('#checkbox').attr('checked',true) 去选中时 虽然代码中有checked='checked',但是画面表现都没有打勾. 例如如下的代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML

jquery实现复选框全选,全不选,反选中的问题

今天试了一下用jquery选择复选框,本来以为很简单的东西却有bug,于是搜索了一下找到了解决方法. html代码如下(这里没有用任何样式,就没有再放css了): <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="test_ch5.css" > <title>test_ch5</title> &

复选框操作

<script>     $(function () {         //查找id=tab的表格,下面所有的tr,下面的所有td,第一个td下面复习框的点击事件.         $("#tab tr>td:nth-child(1)").find("input[type='checkbox']").bind("click", function () {             if ($(this).attr("c

jQuery实现复选框全选/全部取消/反选/获得选择的值

本地单文件上传脚本,命名uf 这是在本机上做的测试,利用bpcs_uploader脚本实现,只是进行简单的封装,自动完善云端文件路径. 技术要点:使用dirname获取文件所在目录,使用pwd获取文件完整路径,并作为云端文件路径. #!/bin/bash cur_dir=$(cd "$(dirname "$1")"; pwd) name=$(basename "$1") /home/grm/bin/bpcs_uploader/bpcs_uploa

jQuery判断复选框是否勾选

一个功能复选框勾选时给input表单赋值,复选框取消时将表单值清除. 功能:复选框勾选时给input表单赋值,复选框取消时将表单值清除. 实现源码:cyfID为复选框的id $("#cyfID").click(function(){ var ischeck=$(this).attr("checked"); if(ischeck==undefined){ //清除输入框 alert(""); }else{ //给输入框赋值 alert("

jQuery实现复选框的全选、反选、并且根据复选框的&lt;checked属性&gt;控制多个对应div的显示/隐藏

<!doctype html><html> <head> <meta charset="utf-8"> <title>jQuery实现复选框的全选.反选.并且根据复选框的(checked属性)控制多个对应div的显示/隐藏</title> <script type="text/javascript" src="jquery-1.11.3.min.js"></

jquery获取复选框checkbox的值

jQuery API : each(callback) :以每一个匹配的元素作为上下文来执行一个函数. :checked :匹配所有选中的被选中元素(复选框.单选框等,不包括select中的option) Js代码 收藏代码 //js获取复选框值 var obj = document.getElementsByName("interest");//选择所有name="interest"的对象,返回数组 var s='';//如果这样定义var s;变量s中会默认被赋