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 @   蛋蛋仔  阅读(93)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示