jQuery 事件注册

重点事件注册.on()

<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .hue {
      background-color: #0ff;
    }
  </style>
</head>

<body>

  <input type="button" value="增加" id="btn">
  <input type="button" value="自定义" id="btn1">
  <input type="button" value="移除" id="btn2">
  <div>
    <p>我是一个P</p>
  </div>

  <script src="jquery-1.12.4.js"></script>
  <script>
    /* on() 方法在被选元素及子元素上添加一个或多个事件处理程序。
    $(selector).on(event,childSelector,data,function)
        event    必需。规定要从被选元素移除的一个或多个事件或命名空间。由空格分隔多个事件值,也可以是数组。必须是有效的事件。
        childSelector    可选。规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。
        data    可选。规定传递到函数的额外数据。
        function    可选。规定当事件发生时运行的函数。

      自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。
      注意:使用 on() 方法添加的事件处理程序适用于当前及未来的元素(比如由脚本创建的新元素)。
      提示:如需移除事件处理程序,请使用 off() 方法。
      提示:如需添加只运行一次的事件然后移除,请使用 one() 方法。 */
    $(function () {
      //给btn注册点击事件
      $("#btn").on("click", function () {
        $("<p>我是新建的p元素</p>").appendTo("div");
      });

      //注册多个事件
      $("p").on("mouseover mouseout", function () {
        $("p").toggleClass("hue");
      });

      //给div注册委托事件
      $("div").on("mouseover mouseout", "p", function () {
        $("p").toggleClass("hue");
      });

      //多个事件 各自处理函数
      $("p").on({
        mouseover: function () {
          $("p").css("background-color", "lightgray");
        },
        mouseout: function () {
          $("p").css("background-color", "lightblue");
        },
        click: function () {
          $("p").css("background-color", "yellow");
        }
      });

      //自定义事件
      $("p").on("myOwnEvent", function (event, showName) {
        $(this).text(showName + "单击此按钮可将自定义事件附加到此p元素上。").show();
      });
      $("#btn1").click(function () {
        $("p").trigger("myOwnEvent", ["小白+"]);
      });

      //off()移除on方法添加的事件
      $("#btn2").click(function () {
        $("p").off("click");
      });

    });
  </script>

</body>

</html>

1.bind()方法

//bind方式
      //bind() 方法向被选元素添加一个或多个事件处理程序,以及当事件发生时运行的函数。
      //自 jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的首选方法。
      //语法:$(selector).bind(event,data,function,map)
      //event    必需。规定添加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。
      //data    可选。规定传递到函数的额外数据。
      //function    必需。规定当事件发生时运行的函数。
      $("p").bind("mouseover mouseout", function () {
        $("p").toggleClass("intro");
      });

 

2.delegate()

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title></title>
  <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
  </script>
  <script>
    //delegate:代理,委托(给父元素注册委托事件,最终还是有子元素来执行。)
    //$('div').delegate(childSelector,event,data,function)
    //delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
    //使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。
    //(自 jQuery 版本 1.7 起,on() 方法是向被选元素添加事件处理程序的首选方法。)
    //childSelector    必需。规定要添加事件处理程序的一个或多个子元素。(真正执行事件的子元素)
    //event    必需。规定添加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。
    //data    可选。规定传递到函数的额外数据。
    //function    必需。规定当事件发生时运行的函数。
    $(document).ready(function () {
      $("div").delegate("p", "click", function () {
        $(this).slideToggle();
      });
      $("button").click(function () {
        $("<p>这是一个新段落。</p>").insertAfter("button");
      });
    });
  </script>
</head>

<body>
  <p><b>注意:</b> 只有在 div 元素中的 p 元素才有效果。</p>
  <div style="background-color:yellow">
    <p>这是一个段落。</p>
    <p>点击任意一个 p 元素,使其消失,包括这个。</p>
    <button>在这个按钮后新增一个 p 元素</button>
  </div>
</body>

</html>

 

上一篇:lambda表达式


下一篇:FSPageContentView这个库需要修改源码才能用,否则有黑屏bug