jquery attr处理checkbox / select 等表单元素时的坑

先上html结构

<body>
    <form action="">
        <input type="checkbox" id="checkedAll">全选/全不选<br>
        <input type="checkbox" name="items" value="足球">足球
        <input type="checkbox" name="items" value="蓝球">蓝球
        <input type="checkbox" name="items" value="羽毛球">羽毛球
        <input type="checkbox" name="items" value="乒乓球">乒乓球<br>
        <input type="button" id="send" value="提交">
    </form>
</body>

如图,这是前端进阶经典书籍【锋利的jquery】中的一个案例,使用attr方法给元素添加属性以达到选中与取消效果。

要求:1. 点击全选/全部选,改变下面四个复选框选中状态;

2. 单独点击下方按钮,只要存在未选中的,则上方全选/全不选为未选中状态,全部选中,则上方全选/全不选也自动变为选中状态。

<script>
    $("#checkedAll").on("click",function(){
        // 判断点击后this.checked的结果,默认未选中即为false,第一次点击则为true,第二次为false,再赋值给下面的input(此处逻辑与书上稍有不同)        // 注意事项: 使用attr给表单元素设置选中状态时,第二个参数一定要是布尔值true/false,不能习惯性写成带引号,那就是字符串了。
        if(this.checked){
            $("input[name=items]").attr("checked",true);
        }else{
            $("input[name=items]").attr("checked",false);
        }
    })
</script>

运行起来似乎没问题,但当多次点击之后会发现,属性可以添加上去,但选中状态并没有改变。

what‘s wrong?

这就要归宿到jQuery的版本问题了,在1.6之后,对于元素固有的属性,应该使用  prop() 方法。

<script>
    $("#checkedAll").on("click",function(){
        console.log(!this.checked);
        if(this.checked){
            $("input[name=items]").prop("checked",true);
        }else{
            $("input[name=items]").prop("checked",false);
        }
    })
</script>

以上代码还可以精简为

<script>
    $("#checkedAll").on("click",function(){
        $("input").prop("checked",this.checked);
    })
</script>
时间: 2024-10-04 00:35:50

jquery attr处理checkbox / select 等表单元素时的坑的相关文章

Jquery学习笔记:操作form表单元素之二(复选框和单选框)

在上面文章的基础上,我们介绍如何操作表单元素中的 复选框和单选框. 一.复选框 <label> <input type="checkbox" id="item" checked> 全选</label> 注意,input标签要放在label标签内,这样点击文字时也会有反映. 如果选中了,调用  $("#item").prop("checked")返回true,否则返回false 同样利用pro

点击enter回车键实现表单元素切换焦点效果

点击enter回车键实现表单元素切换焦点效果:现在网站都比较追求人性化,比如填写表单的时候,能够实现点击回车就可以切换表单元素的焦点,这样比使用鼠标进行切换更能让人接受,下面就通过代码实例介绍一下如何实现此功能.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://w

利用jQuery来简化radio,checkbox,select,radio表单元素的操作

获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $("select[@name=items] option[@selected]").text(); select下拉框的第二个元素为当前选中值 $('#select_id')[0].selectedIndex = 1; radio单选组的第二个元素为当前选中值.前端框架分享 $('input[@n

jQuery获取Select选择的Text(非表单元素)和 Value(表单元素)(转)

jQuery获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 2. var checkText=$("#select_id").find("option:selected").text(); //获取Select选择的Text 3. var checkValue=$("#selec

jquery的attr方法禁用表单元素

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <ti

[ jquery 方法val([val|fn|arr]) ] 此方法获得匹配元素的当前值,常应用于表单元素,select....

获得匹配元素的当前值,常应用于表单元素,select....,可读可写 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' content='keywor

基于JQuery实现表单元素值的回写

form.jsp: <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html &

[ jquery 表单UI选择器和表单元素属性选择器 ] 表单UI选择器和表单元素属性选择器

表单UI选择器和表单元素属性选择器: 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' content='keyword1,keyword2,keywo

jQuery操作Form表单元素

Web开发中常常须要操作表单,form表单元素有select.checkbox.radio.textarea.button.file.text.hidden.password等. 当中checkbox和radio的读写值操作比較多变,checkbox和radio常常常使用在一个分组里.实现多选或者单选. jQuery提供了利用表单选择器我们能够极其方便地获取表单的某个或某类型的元素. 选择器 返回 演示样例 :input 集合元素 $(":input")选取全部,,和元素. :text