jquery事件处理on学习笔记

【语法】

element.on(events,[selector],fn)

1、events一个或多个用空格隔开的事件类型,如“click”或“click keydown”

2、selector:元素的子元素选择器。如ul里面的li

3、fn:回调函数,即绑定在元素身上的倾听函数

作用一:绑定一个或多个处理事件处理程序

<body>
    <div></div>
</body>

情况1:绑定多个事件,且事件的处理程序不同(以对象的形式书写)

<script>
    $(function() {
        $("div").on({
            mouseenter: function() {
                $(this).css("background", "skyblue");
            },
            click: function() {
                $(this).css("background", "purple");
            },
            mouseleave: function() {
                $(this).css("background", "blue")
            }
        })
    })
</script>

情况2:绑定多个事件,事件的处理程序相同,多个事件之间用空格隔开

<script>
    $(function() {
        $("div").on("mouseenter mouseleave", function() {
            //鼠标经过加上current类,鼠标离开去掉current类
            $(this).toggleClass("current");
        })
    })
</script>

作用二:实现事件委托

 $("ul li").click(function() {
            ……
  })

问题:利用隐式迭代,给每一个小li都绑定了一个点击click事件,略显麻烦改进如下:

 $("ul").on("click","li",function(){
           ……
  })

解决方案:利用on()只用给父元素ul绑定的点击click事件,但注意触发的对象是ul的孩子小li,只有点击了li才会触发事件。当点击了li会产生事件冒泡,此时就会触发父亲ul里面的点击click事件

作用三:on()可以给未来动态生成的元素绑定事件(利用到了上述的事件委托)

<body>
    <ul></ul>
</body>

问题:单个注册事件无法实现给“动态创建的元素”绑定事件,

<script>
    $(function() {
        $("ul li").click(function() {
            alert("绑定成功!");
        })
        //单个注册事件,不能给如下后来新创建小li绑定该click事件
        var li = $("<li>我是后来创建的</li>");
        $("ul").append(li);
    })
</script>

解决方案:采用on可以给未来动态创建的小li绑定事件

<script>
    $(function() {
        $("ul").on("click", "li", function() {
            alert("绑定成功!")
        });
        // on()利用可以实现事件委托这一特性,可以给动态创建的元素绑定事件
        var li = $("<li>我是后来创建的</li>");
        $("ul").append(li);

    })
</script>

 

posted @ 2021-07-19 10:04  蛋蛋仔  阅读(91)  评论(0编辑  收藏  举报