zoukankan      html  css  js  c++  java
  • jQuery事件绑定

    先看看 jQuery事件绑定和JavaScript事件绑定的区别

    为一个id为Mydiv的元素添加多个事件

    用JavaScript原生添加事件如下:

    var btn = document.getElementById("Mydiv");
    btn.onclick = function(){
    	alert(1);
    }
    btn.onclick = function(){
    	alert(2);
    }

    执行上面的代码只会alert 2 

    用 jQuery 添加事件如下:

    $btn = $("#Mydiv")
    $btn.click(function(){
      alert("1");
    })
    $btn.click(function(){
      alert("2");
    })

    执行上面的代码会先alert 1 再 alert 2 。再看下面

    $("#Mydiv").on("click",function(){
      alert(1);
    }).on("click",function(){
      alert(2);
    });

    执行上面的代码会先alert 1 再 alert 2

    以上可以说明 jQuery 中的事件绑定具有叠加性,JavaScript原生的事件绑定则是可覆盖的。

    那么 jQuery 中事件绑定方式有几种?

    方式一 <bind>:  绑定: $(selector).bind("事件名",data,function)

            解绑: $(selector).unbind("事件名",handler)

    $("#Mydiv").bind("click",function(){
      alert("1");
     }).bind("click",function(){
      alert("2");
     });

    还可以这样:

    $("#Mydiv").bind({
     click:function() {
      console.log("疼")
     },
     mouseenter:function() {
          console.log("鼠标进入")
     },
    mouseleave:function(){
      console.log("鼠标离开")
    }
    });

    方式二 <one>:  $("选择器").one("事件名",function) 只能触发一次,触发后,自动解绑

    $("#Mydiv").one("mouseenter",function(){
      $(this).css("background","red")
    }).one("click",function(){
      $(this).css("background","yellow")
    });

    方式三 <delegate> : 绑定: $("父元素").delegate("子元素","事件名",function);

              解绑: $(selector).undelegate("事件名",handler)

    就是可以为一个或多个子元素绑定事件

    $("ul").delegate("li","click",function(e){
    $(this).css("background","red");
    })

    方式四 <on> : 绑定: $("选择器").on("事件名","选择器",function)

            解绑: $(selector).off("事件名",handler)

    $(document).on("click","a",function(){

      $(this).css("background","#000")
    }).on("click","p",function(){
      $(this).css("background","yellow")
    }).on("click","h1",function(){
      $(this).css("background","red")
    });

    还可以这样:

    $(document).on("click",function(){
      $("a").css("background","#000")
    }).on("click",function(){
      $("p").css("background","yellow")
    }).on("click",function(){
      $("div").css("background","red")
    });

    不同之处有?

    绑定位置 :
    .bind() 直接绑在目标元素(子元素)上
    .delegate() 绑在父元素上

    事件监听的个数:
    .bind() 导致事件监听个数增多
    .delegate() 始终只有一个监听

    未来子元素:

    bind() 无法让动态生成的新元素自动获得事件处理函数

    .delegate() 即使后来动态生成的新元素也可自动获得父元素上的事件处理函数

     

  • 相关阅读:
    高效 告别996,开启java高效编程之门 5-4新集合类型MultiSet
    高效 告别996,开启java高效编程之门 5-3不可变集合
    高效 告别996,开启java高效编程之门 5-2实战Optional使用
    高效 告别996,开启java高效编程之门 5-1Guava开场
    高效 告别996,开启java高效编程之门 4-6本节总结
    高效 告别996,开启java高效编程之门 4-5TWR进阶与特殊情况
    高效 告别996,开启java高效编程之门 4-4TWR方式关闭流资源
    高效 告别996,开启java高效编程之门 4-3传统方式关闭流资源
    省市经纬度
    Web移动端常见问题-摘抄
  • 原文地址:https://www.cnblogs.com/lan-cheng/p/8414645.html
Copyright © 2011-2022 走看看