zoukankan      html  css  js  c++  java
  • jQuery — 事件

    一、页面载入

      ready(fn)

        用法:

    说明:当DOM载入就绪就可以查询及操纵时绑定一个要执行的函数,最为重要的函数,极大提高了web应用程序响应速度。    

        Demo:

    1 //在DOM加载完成时运行的代码,可以这样写:
    2 $(document).ready(function(){
    3   // 在这里写你的代码...
    4 });
    5 
    6 //简写
    7 $(function($) {
    8   // 你可以在这里继续使用$作为别名...
    9 });

      注意$(function(){}) 与 window.onload = function(){} 区别

        1. 执行时机不同:

          ① jQuery 的页面加载完成之后是浏览器的内核解析完页面的标签创建好 DOM 对象后就执行,可能与 DOM 元素关联的东西并没有加载完

          ② 原生 js 的页面加载完成之后,除了要等浏览器内核解析完标签创建好 DOM 对象,还要等标签显示时需要的内容(如图片,音频视频等)加载完毕后才能执行;

        2.  触发的顺序

          ① jQuery 页面加载完成之后先执行;

          ② 原生 js 的页面加载完成后执行

        3. 执行的次数

          ① 原生 js 的页面加载完成之后,只会执行最后一次的赋值函数;

          ② jQuery 的页面加载完成之后是全部把注册的 function 函数,依次按照顺序全部执行;

    二、事件处理

      1、on(eve,[sel],[data],fn)

        用法:

    说明:在选择元素上绑定一个或多个事件的事件处理函数,自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品

    注意:使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素)

         Demo:

     1 //给所有的段落绑定 单击 事件
     2 $("p").on("click", function(){
     3     alert( $(this).text() );
     4 });
     5 
     6 //也可以传递参数给函数赋值
     7 function myHandler(event) {
     8     alert(event.data.foo);
     9 }
    10 $("p").on("click", {foo: "bar"}, myHandler)

      2、off(eve,[sel],[fn])

        语法:

    说明:在选择元素上移除一个或多个事件的事件处理函数,自 jQuery 版本 1.7 起,off() 方法是 unbind()、die() 和 undelegate() 方法的新的替代品

    注意:如需移除指定的事件处理程序,当事件处理程序被添加时,选择器字符串必须匹配 on() 方法传递的参数

        Demo:

    1 // 移除段落上面的所有事件
    2 $("p").off()
    3 
    4 //从所有段落中删除所有单击处理函数:
    5 $("p").off( "click", "**" )

      3、bind(type,[data],fn)

        用法:

    说明:为每个匹配的元素的特定事件绑定事件处理函数

        Demo:

     1 //当每个段落被点击时,弹出其文本
     2 $("p").bind("click", function(){
     3   alert( $(this).text() );
     4 });
     5 
     6 //bind多个事件,并判断分别是什么事件
     7 $("#areaDiv").bind("mouseover mouseout",function (event) {
     8     if (event.type == "mouseover") {
     9         console.log("鼠标移入");
    10     } else if (event.type == "mouseout") {
    11         console.log("鼠标移出");
    12     }
    13 });

      4、one(type,[data],fn)

        用法:

    说明:为每一个匹配元素的特定事件(像click)绑定一个一次性的事件处理函数。

    注意:在每个对象上,这个事件处理函数只会被执行一次,这个事件处理函数会接收到一个事件对象,可以通过它来阻止(浏览器)默认的行为

        Demo:

    1 //当所有段落被第一次点击的时候,显示所有其文本。
    2 $("p").one("click", function(){
    3   alert( $(this).text() );
    4 });

      5、trigger(type,[data])

        用法:

    说明:在每一个匹配的元素上触发某类事件以及事件的默认行为(比如表单提交)

    注意:该方法与 triggerHandler() 方法类似,不同的是 triggerHandler() 不触发事件的默认行为

    与 triggerHandler() 方法相比的不同之处:

      ① 它不会引起事件的(比如表单提交)的默认行为;

      ② trigger() 会操作 jQuery 对象匹配的所有元素,而 triggerHandler() 只影响第一个匹配元素;

      ③ 右 triggerHandler() 创建的事件不会在 DOM 树中冒泡;如果目标元素不直接处理它们,则不会发生任何事情

        Demo:

    1 //提交第一个表单,但不用 submit()
    2 $("form:first").trigger("submit")

      6、triggerHandle(type,[data])

        用法:

    说明:该方法将会触发指定的事件类型上所有绑定的处理函数。但不会执行浏览器默认动作,也不会产生事件冒泡

        Demo:

     1 //如果你对一个focus事件执行了 .triggerHandler() ,浏览器默认动作将不会被触发,只会触发你绑定的动作。
     2 
     3 //HTML代码
     4 <button id="old">.trigger("focus")</button>
     5 <button id="new">.triggerHandler("focus")</button><br/><br/>
     6 <input type="text" value="To Be Focused"/>
     7 //jQuery代码
     8 $("#old").click(function(){
     9   $("input").trigger("focus");
    10 });
    11 $("#new").click(function(){
    12   $("input").triggerHandler("focus");
    13 });
    14 $("input").focus(function(){
    15   $("<span>Focused!</span>").appendTo("body").fadeOut(1000);
    16 });

      7、unbind(t,[d | f])

        用法:

    说明:bind() 的反向操作,从每一个匹配的元素中删除绑定的事件。

    参数:① 如果没有参数,则删除所有绑定的事件;

          ②  如果提供了事件类型作为参数,则只删除该类型的绑定事件;

        ③  如果把在绑定时传递的处理函数作为第二个参数,则只有这个特定的事件处理函数会被删除。

        Demo:

     1 //把所有段落的所有事件取消绑定
     2 $("p").unbind()
     3  
     4 //将段落的click事件取消绑定
     5 $("p").unbind( "click" )
     6 
     7 //删除特定函数的绑定,将函数作为第二个参数传入
     8 var foo = function () {
     9   // 处理某个事件的代码
    10 };
    11 
    12 $("p").bind("click", foo); // ... 当点击段落的时候会触发 foo 
    13 
    14 $("p").unbind("click", foo); // ... 再也不会被触发 foo

    三、事件委派

      1、live(type,[data],fn)

        用法:

    说明:jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。

        Demo:

     1 //HTML代码
     2 <body>
     3   <div class="clickme">Click here</div>
     4 </body>
     5 
     6 //jQuery代码
     7 $('.clickme').live('click', function() {
     8   alert("Live handler called."); 
     9 });
    10 
    11 //新增元素,依然能够触发事件处理函数
    12 $('body').append('<div class="clickme">Another target</div>');

      2、die(type,[fn])

        用法:

    说明:从元素中删除先前用.live()绑定的所有事件.(此方法与live正好完全相反。)

    参数:① 不带参数,则所有绑定的 live 事件都会被移除

       ② 提供了 type 参数,那么会移除对应的 live 事件

       ③ 指定了第二个参数 function,则只移除指定的事件处理函数

        Demo:

    1 //给按钮解除 click 事件
    2 function aClick() {
    3       $("div").show().fadeOut("slow");
    4   }
    5   $("#unbind").click(function () {
    6       $("#theone").die("click", aClick)
    7   });

      3、delegate(s,[t],[d],fn)

        用法:

    说明:指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。

    注意:使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)

        Demo:

     1 //当点击鼠标时,隐藏或显示 p 元素
     2 //HTML代码
     3 <div style="background-color:red">
     4 <p>这是一个段落。</p>
     5 <button>请点击这里</button>
     6 </div>
     7 //jQuery代码
     8 $("div").delegate("button","click",function(){
     9   $("p").slideToggle();
    10 });

      4、undelegate([s,[t],fn])

        用法:

    说明:删除由 delegate() 方法添加的一个或多个事件处理程序。

        Demo:

    1 //从p元素删除由 delegate() 方法添加的所有事件处理器
    2 $("p").undelegate();
    3 
    4 //从p元素删除由 delegate() 方法添加的所有click事件处理器
    5 $("p").undelegate( "click" )

    四、事件切换

      1、hover([over,]out)

        用法:

    说明:当鼠标移动到一个匹配的元素上面时,会触发指定的第一个函数。当鼠标移出这个元素时,会触发指定的第二个函数。这是一个自定义的方法,它为频繁使用的任务提供了一种“保持在其中”的状态。

    参数: ① over:鼠标移到元素上要触发的函数;

        ② out:鼠标移出元素要触发的函数;

        Demo:

     1 // 鼠标悬停的表格加上特定的类
     2 $("td").hover(
     3   function () {
     4     $(this).addClass("hover");
     5   },
     6   function () {
     7     $(this).removeClass("hover");
     8   }
     9 );
    10 
    11 //hover()方法通过绑定变量"handlerInOut"来切换方法。
    12 $("td").bind("mouseenter mouseleave",handlerInOut);
    13 $("td").hover(handlerInOut);

      2、toggle([spe],[eas],[fn])

        用法:

    说明:用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件

        Demo:

     1 //对表格切换显示/隐藏
     2 $('td).toggle();
     3 
     4 //对表格的切换一个类
     5 $("td").toggle(
     6   function () {
     7     $(this).addClass("selected");
     8   },
     9   function () {
    10     $(this).removeClass("selected");
    11   }
    12 );
    13 
    14 //用200毫秒将段落迅速切换显示状态,之后弹出一个对话框。
    15 $("p").toggle("fast",function(){
    16    alert("Animation Done.");
    17  });

    五、常用事件

      1、blur([[data],fn])

        用法:

    格式: $("p").blur()           触发所有段落的 blur 事件

    说明:当元素失去焦点时触发 blur 事件

      2、change([[data],fn])

        用法:

    格式:$(selector).change()           触发被选元素的 change 事件

    说明:当元素的值发生改变,并失去焦点时触发该事件。

    注意:该事件仅适用于文本域(text field),以及 textarea 和 select 元素。当用于 select 元素时,change 事件会在选择某个选项时发生。当用于 text field 或 text area 时,该事件会在元素失去焦点时发生

      3、click([[data],fn])

        用法:

    格式:$("p").click()            触发页面内所有段落的点击事件

    说明:触发每一个匹配元素的单击事件

      4、dblclick([[data],fn])

        用法:

    格式:$("p").dblclick()        触发页面所有段落的双击事件

    说明:当双击元素时,会发生 dblclick 事件

      5、error([[data],fn])

        用法:

    说明:当元素遇到错误(没有正确载入)时,发生 error事件

        Demo:

    1 //隐藏无效的图像
    2 $("img").error(function(){
    3   $(this).hide();
    4 });

      6、focus([[data],fn])

        用法:

    说明:当元素获取焦点时,触发 focus 事件,可以通过鼠标点击或者键盘上的TAB导航触发。

        Demo:

    1 //当页面加载后将 id 为 'login' 的元素设置焦点
    2 $(document).ready(function(){
    3   $("#login").focus();
    4 });
    5 
    6 //使人无法使用文本框
    7 $("input[type=text]").focus(function(){
    8   this.blur();
    9 });

      7、focusin([[data],fn])

        用法:

    说明:当元素获得焦点时,触发 focusin 事件。focusin事件跟focus事件区别在于,他可以在父元素上检测子元素获取焦点的情况。

        Demo:

    1 //获得焦点后会触发动画
    2 //HTML代码
    3 <p><input type="text" /> <span>focusout fire</span></p>
    4 <p><input type="password" /> <span>focusout fire</span></p>
    5 //jQuery
    6 $("p").focusin(function() {
    7   $(this).find("span").css('display','inline').fadeOut(1000);
    8 });

      8、focusout([[data],fn])

        用法:

    说明:当元素失去焦点时触发 focusout 事件。focusout事件跟blur事件区别在于,它可以在父元素上检测子元素失去焦点的情况

        Demo:

    1 //失去焦点后会触发动画
    2 //HTML代码
    3 <p><input type="text" /> <span>focusout fire</span></p>
    4 <p><input type="password" /> <span>focusout fire</span></p>
    5 //jQuery代码
    6 $("p").focusout(function() {
    7   $(this).find("span").css('display','inline').fadeOut(1000);
    8 });

      9、keydown()

        用法:

    说明:当键盘或按钮被按下时,发生 keydown 事件。

    注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生。

        Demo:

     1 //在页面内对键盘按键做出回应
     2 $(window).keydown(function(event){
     3   switch(event.keyCode) {
     4     // ...
     5     // 不同的按键可以做不同的事情
     6     // 不同的浏览器的keycode不同
     7     // 更多详细信息:     http://unixpapa.com/js/key.html
     8     // ...
     9   }
    10 });

      10、keypress()

        用法:

    说明:当键盘或按钮被按下时,发生 keypress 事件。

    注意:keypress 事件与 keydown 事件类似。当按钮被按下时,会发生该事件。它发生在当前获得焦点的元素上。 不过,与 keydown 事件不同,每插入一个字符,就会发生 keypress 事件。注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生。

        Demo:

    1 //计算在输入域中的按键次数
    2 $("input").keydown(function(){  
    3     $("span").text(i+=1);
    4 });

      11、keyup()

        用法:

    说明:当按钮被松开时,发生 keyup 事件。它发生在当前获得焦点的元素上。

    注意:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生

        Demo:

    1 //当按下按键时,改变文本域的颜色
    2 $("input").keyup(function(){
    3   $("input").css("background-color","#D6D6FF");
    4 });

      12、mousedown()

        用法:

    说明:当鼠标指针移动到元素上方,并按下鼠标按键时,会发生 mousedown 事件

    注意:mousedown 与 click 事件不同,mousedown 事件仅需要按键被按下,而不需要松开即可发生

        Demo:

    1 //当按下鼠标按钮时,隐藏或显示元素
    2 $("button").mousedown(function(){
    3   $("p").slideToggle();
    4 });

      13、mouseenter()

        用法:

    说明:当鼠标指针穿过元素时,会发生 mouseenter 事件。该事件大多数时候会与mouseleave 事件一起使用

    注意:与 mouseover 事件不同,只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。如果鼠标指针穿过任何子元素,同样会触发 mouseover 事件。

        Demo:

    1 //当鼠标指针进入(穿过)元素时,改变元素的背景色
    2 $("p").mouseenter(function(){
    3   $("p").css("background-color","yellow");
    4 });

      14、mouseleave()

        用法:

    说明:当鼠标指针离开元素时,会发生 mouseleave 事件。该事件大多数时候会与mouseenter 事件一起使用

    注意:与 mouseout 事件不同,只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件。如果鼠标指针离开任何子元素,同样会触发 mouseout 事件

        Demo:

    1 //当鼠标指针离开元素时,改变元素的背景色
    2 $("p").mouseleave(function(){
    3   $("p").css("background-color","#E9E9E4");
    4 });

      15、mousemove()

        用法:

    说明:当鼠标指针在指定的元素中移动时,就会发生 mousemove 事件

    注意:mousemove事件处理函数会被传递一个变量——事件对象,其.clientX 和 .clientY 属性代表鼠标的坐标

        Demo:

    1 //获得鼠标指针在页面中的位置
    2 $(document).mousemove(function(e){
    3   $("span").text(e.pageX + ", " + e.pageY);
    4 });

      16、mouseout()

        用法:

    说明:当鼠标指针从元素上移开时,发生 mouseout 事件,该事件大多数时候会与 mouseover 事件一起使用。

    注意:与 mouseleave 事件不同,不论鼠标指针离开被选元素还是任何子元素,都会触发 mouseout 事件。只有在鼠标指针离开被选元素时,才会触发 mouseleave 事件

        Demo:

    1 //当鼠标从元素上移开时,改变元素的背景色
    2 $("p").mouseout(function(){
    3   $("p").css("background-color","#E9E9E4");
    4 });

      17、mouseover()

        用法:

    说明:当鼠标指针位于元素上方时,会发生 mouseover 事件,该事件大多数时候会与 mouseout 事件一起使用

    注意:与 mouseenter 事件不同,不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件

        Demo:

    1 //当鼠标指针位于元素上方时时,改变元素的背景色
    2 $("p").mouseover(function(){
    3   $("p").css("background-color","yellow");
    4 });

      18、mouseup()

        用法:

    说明:当在元素上放松鼠标按钮时,会发生 mouseup 事件

    注意:与 click 事件不同,mouseup 事件仅需要放松按钮。当鼠标指针位于元素上方时,放松鼠标按钮就会触发该事件

        Demo:

    1 //当松开鼠标按钮时,隐藏或显示元素
    2 $("button").mouseup(function(){
    3   $("p").slideToggle();
    4 });

      19、resize()

        用法:

    说明:当调整浏览器窗口的大小时,发生 resize 事件

        Demo:

    1 //每次改变页面窗口的大小时很郁闷的方法
    2 $(window).resize(function(){
    3   alert("Stop it!");
    4 });

      20、scroll()

        用法:

    说明:当用户滚动指定的元素时,会发生 scroll 事件

    注意:scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口)。

        Demo:

    1 //当页面滚动条变化时,执行的函数
    2 $(window).scroll( function() { /* ...do something... */ } );
    3 
    4 //对元素滚动的次数进行计数
    5 $("div").scroll(function() {
    6   $("span").text(x+=1);
    7 });

      21、select()

        用法:

    说明:当 textarea 或文本类型的 input 元素中的文本被选择时,会发生 select 事件

    注意:这个函数会调用执行绑定到select事件的所有函数,包括浏览器的默认行为。可以通过在某个绑定的函数中返回false来防止触发浏览器的默认行为。

        Demo:

    1 //触发所有input元素的select事件
    2 $("input").select();
    3 
    4 //当文本框中文本被选中时执行的函数
    5 $(":text").select( function () { /* ...do something... */ } );

      22、submit()

        用法:

    说明:当提交表单时,会发生 submit 事件

    注意:该事件只适用于表单元素

        Demo:

    1 //提交第一个表单
    2 $("form:first").submit();
    3 
    4 //阻止表单提交
    5 $("form").submit( function () {
    6   return false;
    7 } );

      23、unload()

          用法:

    说明:在当用户离开页面时,会发生 unload 事件。

    以下几种情况,会发出 unload 事件:

        ①  点击某个离开页面的链接

        ②  在地址栏中输入了新的 URL

        ③  使用前进或后退按钮

        ④  关闭浏览器

        ⑤  重新加载页面    

        Demo:

    1 //页面卸载的时候弹出一个警告框
    2 $(window).unload( function () { alert("Bye now!"); } );

     六、事件冒泡

      1、事件冒泡概述

        事件冒泡:父子元素同时监听同一个事件,当触发子元素的事件的时候, 同一个事件也被传递到了父元素的事件里去
    响应。 事件会按照 DOM 层次结构像水泡一样不断向上直至顶端。

      2、解决方法

        ① 在子元素事件函数体内,return false;可以阻止事件的冒泡传递;

        ② 获取事件对象,然后调用 event.stopPropagation()  方法,DOM 中停止事件传播的标准方法

     

  • 相关阅读:
    【BZOJ 3732】 Network
    【BJOI 2018】 求和
    【HDU 1005】 Number Sequence
    【HDU 3652】 B-numbers
    【SCOI 2007】 降雨量
    BZOJ2186 SDOI2008沙拉公主的困惑(数论)
    #38 游戏(线段树)
    BZOJ2339 HNOI2011卡农(动态规划+组合数学)
    BZOJ3107 CQOI2013二进制A+B(动态规划)
    BZOJ3083 遥远的国度(树链剖分+线段树)
  • 原文地址:https://www.cnblogs.com/niujifei/p/12398057.html
Copyright © 2011-2022 走看看