zoukankan      html  css  js  c++  java
  • jQuery中的事件

      JavaScript和HTML之间的交互是通过用户和浏览器操作页面时引发的事件来处理的。当文档或者它的元素发生某些变化或操作时,浏览器就会自动生成一个事件。例如,用户通过键盘在浏览器上打字时,就会生成一个事件。

      在常规的JavaScript中使用最多的是window.onload方法,而在jQuery中,使用最多的则是$(function(){})方法。$(function(){})方法是事件模块中最重要的一个函数,可以极大的提高Web应用程序的响应速度。在使用中需要注意window.onload和$(function(){})方法之间的区别。

      那么,它们的执行时机是什么?

      1.window.onload

        window.onload方法是在所有元素加载到浏览器后才开始执行(包括元素的所有关联文件)。

      2.$(function(){})

        通过jQuery中的$(function(){})注册的事件处理程序,在DOM完全就绪时就可以调用了。

      就好比一个网页加载图片,点击一张图片,使用window.onload必须等到所有图片加载完成后才可以能够进行操作。而使用$(function(){})方法,只要DOM准备就绪就可以进行操作了,不需要等待所有图片加载完毕。从而可以看出,$(function(){})方法在网页加载方面要比window.onload方法速度要更快。

      此外,需要注意,由于在$(function(){})方法内注册的事件,只要DOM就绪就会被执行,因此可能此时的关联文件并为下载完成。想要解决并不难,可以使用jQuery中另一个加载页面方法:load()方法。load()会在onload事件中绑定一个处理函数。如果处理函数绑定给window对象,则会在所有内容加载完成后触发,如果处理函数绑定在元素上,则会在元素加载完成后触发。jQuery代码如下,

    1 $(function(){
    2     //要执行的代码
    3 });

    等价于JavaScript中的代码,

    1 window.onload=function(){
    2    //要执行的代码 
    3 };

      另外,两者的使用情况也不相同,JavaScript中的window.onload方法和jQuery中的$(function(){})方法的执行次数也不相同。window.onload方法在页面中只能有一个,而$(function(){})在页面中可以有多个。

      事件绑定和移除

      1.绑定事件

        在jQuery中,如果需要为匹配的元素同时绑定一个或者多个事件,可以使用bind()方法,语法如下:

        bind(type,[data],参数类型)

      bind()方法有三个参数,

        第一个参数是事件类型,类型包括:blur,focus,load,resize,seroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,moueseenter等。

        第二个参数为可选参数,可以省略。

        第三个参数用来绑定处理函数。

      下面说一下bind()的使用方法,代码如下:

    1 $(function(){
    2         //给div注册事件
    3     $("div").bind("mouseover",function(){
    4         //div变化的颜色
    5         $(this).css("color","red");
    6     });
    7 });

      这里的this与JavaScript中的作用一样,this引用的是携带相应行为的DOM元素。为了能够使该DOM元素能够使用jQuery中的方法,可以使用$(this)转换为jQuery对象。

      通过上面的小例子就可以做成更多的好玩的小程序,下面就使用绑定事件来书写一个光棒效果,代码如下:

     1  $(function () {
     2              $("li").bind("mouseover",function () {
     3              //鼠标移动到当前jQuery对象时发生,字体改变为红色
     4                  $(this).css("color","red");
     5              //鼠标移开时发生,字体恢复到初始状态
     6              }).bind("mouseout",function () {
     7                  $(this).css("color","");
     8              });
     9  });
    10 //body块代码
    11 <ul>
    12         <li>海贼王</li>
    13         <li>火影忍者</li>
    14     </ul>

      效果如下:

     当鼠标移开时“海贼王”会由当前的红色,变回原先的颜色。

      合成事件

      jQuery中有两个合成事件:hover()方法和toggle()方法。hover()方法和toggle()方法都属于jQuery自定义方法。

        1.hover()方法

          语法为:

          hover(enter,leave);

      hover()用于模拟鼠标悬停事件。当光标移动到元素上时会触发第一个函数(enter),当光标移除这个元素时会触发第二个函数(leave)。

      使用hover()方法实现光棒效果,代码如下:

    1 1 $(function(){
    2 2     $("div").hover(function(){
    3 3     //将字体背景色换为黄色
    4 4     $(this).css("background","yellow");
    5 5     }).function(){
    6         //鼠标移出时发生
    7        $(this).css("background","");
    8        }
    9 6 });

      2.toggle()

        语法为:

      toggle(fn1,fn2,fn3....,fnN);

      toggle()方法用于模拟鼠标连续点击事件。第一次单击元素,触发第一个元素;再次点击时,触发第二个元素。如果有更多的元素,则依次触发,直到最后。

    1 $(function(){
    2     $("div").toggle(function(){
    3         $(this).css("background","yellow");
    4     }.function(){
    5         $(this).css("background","");
    6     })
    7 });

    使用toggle()方法不仅实现了同样的方法,同时还节省了代码量。

       事件冒泡

      1.什么是事件冒泡?

        在页面上有多个事件,也可以多个事件响应同一个事件。如,在网页上有两个元素,其中一个元素嵌套在另一个元素中,并且都被绑定了click事件。就好比公安机关,有情况必须得先经过你的队长,然后是大队长,在往上是局长等等,就可以称为冒泡。完整代码如下:

      

     1 <script type="text/javascript">
     2   $(function(){
     3       //为span元素绑定click事件
     4     $(“span”).bind("click",function(){
     5         var txt=$('#mysg').html()+"<p>span标签被单击</p>";
     6         $("mysg").html(txt);
     7     })
     8     //为div元素绑定click事件
     9     $(“#content”).bind("click",function(){
    10         var txt=$('#mysg').html()+"<p>div标签被单击</p>";
    11         $("mysg").html(txt);
    12     })
    13     //为body元素绑定click事件
    14     $(“body”).bind("click",function(){
    15         var txt=$('#mysg').html()+"<p>body标签被单击</p>";
    16         $("mysg").html(txt);
    17     })
    18   })
    19 </script>    
    20 
    21 <body>
    22    <div id="concent">
    23         外层div元素
    24         <span>内部span元素</span>
    25         外层div元素
    26      </div>
    27     <div id="mysg">
    28     </div>
    29 </body>    

      当单击内部<span>元素时,会触发<span>元素的click事件。 在单击<span>元素的同时,也单击了包含<span>元素的<div>元素和包含<div>元素的<body>元素,并且每一个都按照指定的顺序响应click事件。

      2.停止事件冒泡

        代码如下:

    1 $(“span”).bind("click",function(even){//even事件对象
    2         var txt=$('#mysg').html()+"<p>span标签被单击</p>";
    3         $("mysg").html(txt);
    4         even.stopPropgation();//停止冒泡
    5     })

       移除事件

        在绑定事件的过程中,不仅可以为同一个元素绑定多个事件,也可以多个元素绑定一个事件。绑定多个事件使用代码如下:

     1 <script>
     2    $("#btn").bind("click",function(){
     3     $("#text").append("<p>span标签</p>");
     4    }.bind("click",function(){
     5     $("#text").append("<p>span标签</p>");
     6    }.bind("click",function(){
     7     $("#text").append("<p>span标签</p>");
     8    });
     9 </script>
    10 <body>
    11 <input type="button" id="btn" value="单击我" />
    12 <div id="test"></div>
    13 </body>
  • 相关阅读:
    由asp的一个错误,看语言的不同:asp & java
    chrome 显示图片遇到的问题,与 淘宝图片服务器 缓存 有关系
    asp 调用 vb(activex dll) ,参数传递(传引用)需要注意
    asp <----> vb(com,dll) <---> c 来回的调用,生命在于折腾
    HTTP/1.1 100 Continue
    java 线程栈 & java.lang.StackOverflowError
    硬盘分区的意义
    硬盘性能 & 文件碎片的一些思考
    Java并发——ReentrantLock类源码阅读
    使用Windows的NAT功能
  • 原文地址:https://www.cnblogs.com/Tony-cheen/p/5520573.html
Copyright © 2011-2022 走看看