zoukankan      html  css  js  c++  java
  • Jquery学习笔记:事件处理基础介绍

    一、引子

    给html的元素添加一个响应事件,最简单的办法是直接在元素标签内填写事件属性,先看一个最简单的例子

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="utf-8">
        <title>测试</title>
        <script src="jquery.min.js"></script>
        <script>
            function test(){
                alert("hello");
            }
        </script>
      </head>
      <body>
        <div>
            <button onclick="test()">点击我</button>
        </div>
      </body>
    </html>

    直接在元素标签中设置,这种方式最简单、直接,对于简单的应用问题不大。但也存在很多不好的地方,如让html标签比较臃肿,无法动态设置元素的事件。
    而利用jquery来处理则会方面很多。

    二、页面加载后的load事件

    利用jquery可以给页面添加事件,当页面框架下载完毕后就会自动被执行。 在很多的页面应用中都会用到这个功能,可以在该事件中做很多初始化的动作,也可以利用ajax向服务器获取初始数据等。具体例子如:

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="utf-8">
        <title>测试</title>
        <script src="jquery.min.js"></script>
      </head>
      <body>
        <div>
            <button>点击我</button>
        </div>
      </body>
      <script>
        $(function(){
            alert("i am first after load");
        });
        $(function(){
            alert("i am second after load");
        });
      </script>
    </html>

    在浏览器中打开该页面后,就会先后弹出两个alert框。 加载事件代码编写非常简单。就是调用jquery的 $()函数,参数是一个js函数。
    而且可以设置多个,按照编写的先后顺序被执行,如上面代码。

    三、利用jquery给元素设置事件响应

    通过jquery设置事件,是通过编写相应的代码来完成,举例说明:

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="utf-8">
        <title>测试</title>
        <script src="jquery.min.js"></script>
        <style>
            html,body{
                height:100%;
            }
        </style>
      </head>
      <body>
        <div style="height:100px;border:1px solid red">
            <button id="btn">点击我</button>
        </div>
      </body>
      <script>
        $(function(){
            $("#btn").click(function(event){
                alert("hello");
            });
        });
    
      </script>
    </html>

        jquery对象有很多事件方法,给元素设置事件,先获取该元素对应的jquery对象(如上面的代码$("#btn")),然后调用相应的方法,如上面的click方法,参数就是一个函数。当元素事件被触发时,该函数就会被执行。

        注意不同类型的事件有不同的方法,这里的click方法代表最常见的鼠标点击事件。还有很多其它事件(如鼠标双击、鼠标移动、键盘事件)等。而且不同的html元素有不同的事件类型,有些事件类型是大家都有的,有些是某些元素独有的。    

    四、事件冒泡概念

    html的事件机制有个冒泡机制,也就是说事件会从最先被触发的元素逐步向包含它的父元素传递。除非中间被取消。

    还是举例说明。

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="utf-8">
        <title>测试</title>
        <script src="jquery.min.js"></script>
      </head>
      <body>
        <div style="height:100px;border:1px solid red">
            <button>点击我</button>
        </div>
      </body>
      <script>
        $(function(){
            $("body").click(function(){
                alert("hello,body");
            });
            $("div").click(function(){
                alert("hello,div");
            });
            $("button").click(function(){
                alert("hello,button");
            });
        });
    
      </script>
    </html>

    上面的js代码,我们为 button, div, body 都设置了click响应事件。当我们点击按钮时,会发现,首先弹出"hello,button"的alert框,再弹出"hello,div"的alert框,最后弹出"hello,body"的alert框。

    实际我们点击的是 button,并没有点击在div区域上,或div外。但因为有冒泡机制,事件会逐步往上传递。

    如果我们点击在div区域(不点击到button)上,会发现只会先后弹出 "hello,div" 和 "hello,body"。

    如果我们点击div区域外的地方,会发现只会弹出  "hello,body"。

    如果我们希望阻止事件的冒泡过程,比如希望当点击button时,只会触发button的click事件,而不会往上传递触发div和body的事件。

    这个实现非常简单,只需在button的响应函数中最后添加return false语句即可。如:

            $("button").click(function(){
                alert("hello,button");
                return false;
            });        

    这时,当我们点击按钮时,会发现除按钮自己的click事件被触发外,div的和body的都不会被触发。

    五、获取事件对象

    在事件响应处理函数中,我们有时候需要知道被触发的元素等信息。 我们先来看一段代码:

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="utf-8">
        <title>测试</title>
        <script src="jquery.min.js"></script>
        <style>
            html,body{
                height:100%;
            }
        </style>
      </head>
      <body>
        <div style="height:100px;border:1px solid red">
            <button>点击我</button>
        </div>
      </body>
      <script>
        $(function(){
            $("body,div,button").click(function(){
                alert(this.tagName);
            });
        });
    
      </script>
    </html>

    上面代码中的 $("body,div,button") 同时返回包含 body,div和button三个元素对应的jquery对象,这样再调用click方法,一次给三个元素设置click事件。这也是jquery的强大之处。 在该方法中关键字 this 就是代表响应当前事件的元素(是dom对象,不是jquery对象),注意this代表的不是触发事件的元素。比如,如果鼠标点击的是button,但在div的事件里,其this代表的是div,而不是button.

    如果想要在上级元素的事件响应中获取触发元素呢? 比如点击的是button,但事件响应是div的,这时想获取到button对象,该如何操作呢?

    我们再来看一段代码:

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="utf-8">
        <title>测试</title>
        <script src="jquery.min.js"></script>
        <style>
            html,body{
                height:100%;
            }
        </style>
      </head>
      <body>
        <div style="height:100px;border:1px solid red">
            <button>点击我</button>
        </div>
      </body>
      <script>
        $(function(){
            $("div").click(function(event){
                alert("this is:"+this.tagName);
                alert("target is:"+event.target.tagName);
                alert("currentTarget is:"+event.currentTarget.tagName);
            });
        });
    
      </script>
    </html>

      上述的event是代表事件对象,该对象封装了事件信息,通过它可以获取到被触发的元素等信息。 注意,在chrome和ie中,event同this一样,是个关键字,可以直接引用,但在firefox,上面代码中的event是无效的,需要通过参数传递过来。如上面代码 $("div").click(function(event){ ,所以为了各种浏览器兼容,最好加上参数,当然参数名不一定取event,可以任意的合法标识符。

      这时如果去点击div区域(非button区域),发现三个alert语句显示的都是DIV. 

      这时如果点击的是button按钮,发现三个alert语句分别显示的是 DIV,BUTTON,DIV.

      这说明this始终是代表当前事件触发的对象,event的currentTarget属性也是代表当前事件触发的对象,而event的target对象代表的是最原始被触发的对象。

      通过上面的方式,既能获取到原始的对象,又能获取到当前的对象,剩下的事情就好办了,注意上述对象都是dom对象,需要通过 $()函数转化为jquery对象。

    六、动态添加、去除事件

      通过上面的介绍可以看出,通过调用jquery对象的click方法,可以给其包含的html元素设置click事件。那如何通过代码将事件去除呢?

    这有多种方法(包括添加事件除调用click方法外,也有其它方法),我们这里只介绍最简单的方法。例子代码如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="utf-8">
        <title>测试</title>
        <script src="jquery.min.js"></script>
        <style>
            html,body{
                height:100%;
            }
        </style>
      </head>
      <body>
        <div style="height:100px;border:1px solid red">
            <button id="addBtn">添加事件</button>
            <button id="delBtn">去除事件</button>
        </div>
      </body>
      <script>
        $(function(){
            $("#addBtn").click(function(event){
                $("div").click(function(event){
                    alert("i is div");
                });
                return false;
            });
            
            $("#delBtn").click(function(event){
                $("div").unbind("click");
                return false;
            });
        });
    
      </script>
    </html>

    通过调用jquery对象的 unbind方法可以解除绑定的具体事件。

    七、小结
      

     上面的内容,我们介绍了html事件处理最核心、最基础的概念和使用,并且是通过click事件来说明的。剩下的内容只是不同的元素有不同的响应事件的差别了。这个在后面的文章中介绍。

  • 相关阅读:
    算法:POJ1008 Maya Calendar
    给我的十八岁
    算法:POJ1007 DNA sorting
    算法:POJ1006 三重峰值问题
    【树链剖分】洛谷P3384树剖模板
    【树链剖分】洛谷P3379 树链剖分求LCA
    【Tarjan缩点】PO3352 Road Construction
    【Dijkstra堆优化】洛谷P2243电路维修
    【Tarjan缩点】POJ2186 Popular Cows
    【最短路·差分约束】洛谷P1250
  • 原文地址:https://www.cnblogs.com/51kata/p/5123518.html
Copyright © 2011-2022 走看看