關於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()綁定是可以動態綁定事件,只要父元素在綁定時已經存在。本質是將子元素綁定到父元素上,也就是事件委託。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章