关于on()绑定和click()事件的区别 jquery基础学习

说起本文,我是因为项目中的一个问题导致的。然后我查了各种资料总结了一下。

先上代码

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <link href="tablestyle.css" rel="stylesheet" />
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>
        $(function () {
            //不能捕捉到事件,因为js是从上到下加载,所以后面动态生成的chenckbox此时还没有生成。
            $("table input[type='checkbox']").click(function () {
                alert("1213");
            })
            //可以捕捉到事件
            $("table").on("click", "input[type='checkbox']", function () {
                alert("我是on方法");
            })
            //动态生成表格,我已经习惯用表格做案例了。
            Createtable();
            function Createtable() {
                for (var i = 0; i < 10; i++) {
                    var jcclass = "trmian" + i;
                    var childclass = "." + jcclass;
                    $("#maintable").append("<tr class=" + jcclass + "></tr>")
                    for (var k = 0; k < 3; k++) {
                        if (k == 0) {
                            $(childclass).append("<td>" + i + "</td>");
                        } else if (k == 1) {
                            $(childclass).append("<td><input type='checkbox'  value='男'/></td>");
                        } else if (k == 2) {
                            $(childclass).append("<td><input type='checkbox'  value='女'/></td>");
                        }
                    }
                }
            }
        })
    </script>
</head>

<body>
    <table id="maintable">
        <tr>
            <td>序号</td>
            <td>男</td>
            <td>女</td>
        </tr>
    </table>
</body>
</html>

有人会说,既然 $("table input[type='checkbox']").click(function () {alert("1213"); })

不能捕捉到事件,因为js是从上到下加载,所以后面动态生成的chenckbox此时还没有生成。那么直接把他放在表格加载之后就可以了啊?确实,如果你非要这么做,那确实可以,我也测试过了。但是在实际开发中,前台的数据往往是从后台请求过来的,此时是多线程。楼主试验过,在这种(如ajax)的情况下,及时把上面的方法写在动态加载后面,也是依然没有作用的。!所以我们要用$("table").on("input[type='checkbox']","click",function(){""})。只有通过on绑定click事件的方式才能达到效果。

总结:click()和不带子元素的on()的作用是一样的,只会对当前存在的dom元素起作用。

         带子元素的on()绑定是可以动态绑定事件,只要父元素在绑定时已经存在。本质是将子元素绑定到父元素上,也就是事件委托。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值