前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jQuery 事件注册、事件处理

jQuery 事件注册、事件处理

作者头像
梨涡浅笑
发布2020-10-27 15:27:24
3.8K0
发布2020-10-27 15:27:24
举报
文章被收录于专栏:全栈自学笔记

1. jQuery 事件注册

​ jQuery 为我们提供了方便的事件注册机制,是开发人员抑郁操作优缺点如下:

  • 优点: 操作简单,且不用担心事件覆盖等问题。
  • 缺点: 普通的事件注册不能做事件委托,且无法实现事件解绑,需要借助其他方法。

语法

代码语言:javascript
复制
element.事件(function(){}) 
$(“div”).click(function(){  事件处理程序 })

其他事件和原生基本一致。 比如mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll 等

演示代码

代码语言:javascript
复制
<body>
    <div></div>
    <script>
        $(function() {
            // 1. 单个事件注册
            $("div").click(function() {
                $(this).css("background", "purple");
            });
            $("div").mouseenter(function() {
                $(this).css("background", "skyblue");
            });
        })
    </script>
</body>

2. jQuery 事件处理

​ 因为普通注册事件方法的不足,jQuery又开发了多个处理方法,重点讲解如下:

  • on(): 用于事件绑定,目前最好用的事件绑定方法
  • off(): 事件解绑
  • trigger() / triggerHandler(): 事件触发

2.1 事件处理 on() 绑定事件

​ 因为普通注册事件方法的不足,jQuery又创建了多个新的事件绑定方法bind() / live() / delegate() / on()等,其中最好用的是: on()

on() 方法在匹配元素上绑定一个或多个事件的事件处理函数

语法

代码语言:javascript
复制
element.on(events,[selector],fn) 

1. events:一个或多个用空格分隔的事件类型,如"click"或"keydown" 。 2. selector: 元素的子元素选择器 。 3. fn:回调函数 即绑定在元素身上的侦听函数。

on() 方法优势1:

可以绑定多个事件,多个处理事件处理程序。

代码语言:javascript
复制
 $(“div”).on({   
  mouseover: function(){},    
  mouseout: function(){},   c
  lick: function(){}  
});     

如果事件处理程序相同

代码语言:javascript
复制
 $(“div”).on(“mouseover mouseout”, function() {    
  $(this).toggleClass(“current”);   
}); 

on() 方法优势2: 可以事件委派操作 。事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素

代码语言:javascript
复制
$('ul').on('click', 'li', function() {     
  alert('hello world!'); 
});   

在此之前有bind(), live() delegate()等方法来处理事件绑定或者事件委派,最新版本的请用on替代他们。

on() 方法优势3:

动态创建的元素,click() 没有办法绑定事件, on() 可以给动态生成的元素绑定事件

代码语言:javascript
复制
 $(“div").on("click",”p”, function(){     
     alert("俺可以给动态生成的元素绑定事件")  
}); 
代码语言:javascript
复制
 $("div").append($("<p>我是动态创建的p</p>")); 

演示代码

代码语言:javascript
复制
<body>
    <div></div>
    <ul>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
    </ul>
    <ol></ol>

    <script>
        $(function() {
            // (1) on可以绑定1个或者多个事件处理程序
            // $("div").on({
            //     mouseenter: function() {
            //         $(this).css("background", "skyblue");
            //     },
            //     click: function() {
            //         $(this).css("background", "purple");
            //     }
            // });
            $("div").on("mouseenter mouseleave", function() {
                $(this).toggleClass("current");
            });
  
            // (2) on可以实现事件委托(委派)
            // click 是绑定在ul 身上的,但是 触发的对象是 ul 里面的小li
            // $("ul li").click();
            $("ul").on("click", "li", function() {
                alert(11);
            });

            // (3) on可以给未来动态创建的元素绑定事件
            $("ol").on("click", "li", function() {
                alert(11);
            })
            var li = $("<li>我是后来创建的</li>");
            $("ol").append(li);
        })
    </script>
</body>

2.2. 案例:发布微博案例

1.点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中。2.点击的删除按钮,可以删除当前的微博留言。

​ 代码实现

代码语言:javascript
复制
<script>
      $(function () {
        // 1.点击发布按钮, 动态创建一个小li,放入文本框的内容和删除按钮, 并且添加到ul 中
        $(".btn").on("click", function () {
          var li = $("<li></li>");
          li.html($(".txt").val() + "<a href='javascript:;'>删除</a>");
          $("ul").prepend(li);
          li.slideDown(); // 让小li 滑动出来
          $(".txt").val(); // 发布后把之前文本框里输入的内容清空
        });
        // 2.点击的删除按钮,可以删除当前的微博留言li
        // 原来的方法 此时的click不能给动态创建的a标签添加事件  因为上面添加的a还没有触发 这个查询不到
        // $("ul a").click(function () {
        //   $("li").remove();
        // });
        // on可以给动态创建的元素绑定事件
        $("ul").on("click", "a", function () {
          $(this)
            .parent()
            .slideUp(function () {
              $(this).remove();
            });
        });
      });
    </script>

2.3. 事件处理 off() 解绑事件

​ 当某个事件上面的逻辑,在特定需求下不需要的时候,可以把该事件上的逻辑移除,这个过程我们称为事件解绑。jQuery 为我们提供 了多种事件解绑方法:die() / undelegate() / off() 等,甚至还有只触发一次的事件绑定方法 one(),在这里我们重点讲解一下 off() ;

语法

off() 方法可以移除通过 on() 方法添加的事件处理程序。

代码语言:javascript
复制
$("p").off() // 解绑p元素所有事件处理程序 
 
$("p").off( "click")  // 解绑p元素上面的点击事件 后面的 foo 是侦听函数名 
 
$("ul").off("click", "li");   // 解绑事件委托 

如果有的事件只想触发一次, 可以使用 one() 来绑定事件。

演示代码

代码语言:javascript
复制
<body>
    <div></div>
    <ul>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
        <li>我们都是好孩子</li>
    </ul>
    <p>我是一个P标签</p>
    <script>
        $(function() {
              // 事件绑定
            $("div").on({
                click: function() {
                    console.log("我点击了");
                },
                mouseover: function() {
                    console.log('我鼠标经过了');
                }
            });
            $("ul").on("click", "li", function() {
                alert(11);
            });
  
            // 1. 事件解绑 off 
            // $("div").off();  // 这个是解除了div身上的所有事件
            $("div").off("click"); // 这个是解除了div身上的点击事件
            $("ul").off("click", "li");
  
            // 2. one() 但是它只能触发事件一次
            $("p").one("click", function() {
                alert(11);
            })
        })
    </script>
</body>

2.4. 事件处理 trigger() 自动触发事件

​ 有些时候,在某些特定的条件下,我们希望某些事件能够自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发。由此 jQuery 为我们提供了两个自动触发事件 trigger() 和 triggerHandler() ;

有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标 点击触发。

语法

代码语言:javascript
复制
element.click()  // 第一种简写形式 
代码语言:javascript
复制
element.trigger("type") // 第二种自动触发模式 
代码语言:javascript
复制
$("p").on("click", function () {   
alert("hi~"); 
});  
 
$("p").trigger("click"); // 此时自动触发点击事件,不需要鼠标点击 
代码语言:javascript
复制
element.triggerHandler(type)  // 第三种自动触发模式 

triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。

演示代码

代码语言:javascript
复制
<body>
    <div></div>
    <input type="text">
      
    <script>
    $(function() {
      // 绑定事件
      $("div").on("click", function() {
        alert(11);
      });

      // 自动触发事件
      // 1. 元素.事件()
      // $("div").click();会触发元素的默认行为
      
      // 2. 元素.trigger("事件")
      // $("div").trigger("click");会触发元素的默认行为
      $("input").trigger("focus");
      
      // 3. 元素.triggerHandler("事件") 就是不会触发元素的默认行为
      $("input").on("focus", function() {
        $(this).val("你好吗");
      });
      // 一个会获取焦点,一个不会
      $("div").triggerHandler("click");
      // $("input").triggerHandler("focus");
    });
    </script>
</body>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. jQuery 事件注册
  • 2. jQuery 事件处理
    • 2.1 事件处理 on() 绑定事件
      • 2.2. 案例:发布微博案例
        • 2.3. 事件处理 off() 解绑事件
          • 2.4. 事件处理 trigger() 自动触发事件
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档