jquery checkbox 选中了为啥没有效果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery checkbox 选中了为啥没有效果相关的知识,希望对你有一定的参考价值。

参考技术A 第一种 方法:$("input:checkbox").eq(索引).attr("checked","checked");
第二种 方法:$("input:checkbox")[索引].checked=true;
参考技术B

你看看代码吧

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>HTML5学堂</title>
</head>
<body>
    <div class="h5course">学习HTML5,到HTML5学堂</div>
    <input class="h5course-com" id="h5courseCom" type="checkbox" /> 
    <label for="h5courseCom">HTML5学堂,一个神奇的网站</label>
    <script src="js/jquery-3.2.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $('.h5course-com').change(function() 
            if ($(this).prop('checked')) 
                alert('我选中啦');
            ;
        );
    </script>
</body>
</html>

本回答被提问者采纳

解决checkbox点击选中问题

文章目录


今天来了解下checkbox的点击效果,以及点击一行item同样实现checkbox的点击效果

通过2种方式来处理
1是直接通过元素布局
2是通过jquery的append方法来实现,因为append的元素,是异步的,通过query查找元素添加点击事件就失效了

通过手动布局

<div class="my-course">
        <div class="my-course-left">
            <input type="checkbox" class="course-check">
        </div>
        <div class="my-course-right">
            <div class="my-course-title line-limit-length">
                初二数学 利用“数形结合思想” 初二数形结合思想
                初二数学 利用“数形结合思想” 初二数形结合思想
                初二数学 利用“数形结合思想” 初二数形结合思想
                初二数学 利用“数形结合思想” 初二数形结合思想

            </div>

            <div class="course-time-price">
                <div class="course-time">
                    2018-10-07
                </div>
                <div class="course-price">
                    ¥25元
                </div>
            </div>
        </div>
    </div>
    <div class="my-course">
        <div class="my-course-left">
            <input type="checkbox" class="course-check">
        </div>
        <div class="my-course-right">
            <div class="my-course-title line-limit-length">
                初二数

            </div>

            <div class="course-time-price">
                <div class="course-time">
                    2018-10-07
                </div>
                <div class="course-price">
                    ¥25元
                </div>
            </div>
        </div>
    </div>
 $(".course-check").click(function (event) 
        let courseBox = $(this);
        let checkStatus = courseBox.prop("checked");

        event.stopPropagation()
    );

    $(".my-course").click(function () 
        let myCourse = $(this);
        let courseBox = myCourse.find(".course-check");

        if(courseBox.prop("checked"))
            courseBox.prop("checked",false);
        else 
            courseBox.prop("checked",true);
        
    );

通过append来实现1

  $.each(course_list,function (k, v) 
            console.info(k,v);

            let title = v.title;
            let price = v.price;
            let time = v.time;

            var percourse_html = '<div class="my-course">\\n' +
                '        <div class="my-course-left">\\n' +
                '            <input type="checkbox" class="course-check">\\n' +
                '        </div>\\n' +
                '        <div class="my-course-right">\\n' +
                '            <div class="my-course-title line-limit-length">\\n' +
                '                '+title+'\\n'+
                '            </div>\\n' +
                '\\n' +
                '            <div class="course-time-price">\\n' +
                '                <div class="course-time">\\n' +
                '                    '+time+'\\n' +
                '                </div>\\n' +
                '                <div class="course-price">\\n' +
                '                    '+price+'\\n' +
                '                </div>\\n' +
                '            </div>\\n' +
                '        </div>\\n' +
                '    </div>';
            course_list_html+= percourse_html

        );

        $(".course-outer").append(course_list_html)

实现方式如下:

$(".course-outer").on("click",".course-check",function () 
        console.info("   my-course----");

        let courseBox = $(this);
        let checkStatus = courseBox.prop("checked");

        if(checkStatus)
            courseBox.prop("checked",false);
        else 
            courseBox.prop("checked",true);
        
    );

    $(".course-outer").on("click",".my-course",function () 
        let myCourse = $(this);
        let courseBox = myCourse.find(".course-check");

        if(courseBox.prop("checked"))
            courseBox.prop("checked",false);
        else 
            courseBox.prop("checked",true);
        
    );

通过label来实现

第2种情况有个bug 就是点击checkbox 不能组织冒泡
我们可以通过外面包裹一个label来实现

 function createCourseList(data) 
        var course_list = data.resp;
        var course_list_html = "";
        $.each(course_list, function (k, v) 

            let title = v.title;
            let price = v.price;
            let time = v.time;
            let id = v.id
            var percourse_htm = '<label for="course-check' + id + '" class="my-course">\\n' +
                '            <div class="my-course-left">\\n' +
                '                <input type="checkbox" id="course-check' + id + '" courseid="' + id +
                '" price="' + price + '" onclick="ckCourse(this)" class="course-checkbox-class">\\n' +
                '            </div>\\n' +
                '            <div class="my-course-right">\\n' +
                '                <div class="my-course-title line-limit-length">\\n' +
                '                    ' + title + '\\n' +
                '                </div>\\n' +
                '                <div class="course-time-price">\\n' +
                '                    <div class="course-time">\\n' + '时间:' +
                '                        ' + timestampToTime(parseInt(time)) + '\\n' +
                '                    </div>\\n' +
                '                    <div class="course-price">\\n' + '价格:' +
                '                        ' + price + '\\n' + '元' +
                '                    </div>\\n' +
                '                </div>\\n' +
                '            </div>\\n' +
                '        </label>\\n';
            $(".course-outer").append(percourse_htm)
        );
    ;
  function ckCourse(obj) 
        var ckObj = $(obj);
        var status = ckObj.prop("checked");

        var price = parseInt(ckObj.attr("price"));//int
        var courseid = ckObj.attr("courseid");//str

        var index = isInArray(ordersIds, courseid);
        if (status) 
            totalPrice += price;
            if (index === -1) 
                ordersIds.push(courseid)
            
         else 
            totalPrice -= price;
            if (index !== -1) 
                ordersIds.splice(index, 1);
            
        
        $(".course-total-price").text(totalPrice);

        console.info(ordersIds)
    

    function isInArray(arr, value) 
        for (var i = 0; i < arr.length; i++) 
            if (value === arr[i]) 
                return i;
            
        
        return -1;
    

这样即可

以上是关于jquery checkbox 选中了为啥没有效果的主要内容,如果未能解决你的问题,请参考以下文章

为啥我用jQuery写好checkbox的全选后,点击两次后,就不行了,要刷新页面后,点击才有响应,源码是这样

jquery判断checkbox是否选中及改变checkbox状态

解决checkbox点击选中问题

解决checkbox点击选中问题

jQuery设置checkbox全选(区别jQuery版本)

为啥input checkbox有 checked='checked'还是没选中