jQuery on() 事件处理方法

在 HTML 和 jQuery 中,on 方法是一个非常强大和灵活的事件处理方法,例如点击事件、鼠标悬停事件、键盘按下事件等。用于在元素上绑定一个或多个事件处理函数。本文将详细介绍 jQuery on 方法的语法、案例以及注意事项。自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代品。

语法


案例

1:绑定点击事件

使用 on 方法绑定点击事件

<button id="myButton">点击我</button>
    <script>
      $('#myButton').on('click', function() {
        alert('按钮已点击!');
      });
    </script>

运行代码

2:取消表单的提交动作,并且通过返回 false 的方法来防止事件冒泡:

<form>
        <input type="text" id="myInput" value="请输入内容">
        <button type="submit" id="myButton">提交</button>
    </form>
    <script>
      $("form").on("submit", false);
    </script>

运行代码

3:通过使用 .stopPropagation(),防止提交事件的冒泡行为,但是并不禁止提交行为。

<form>
        <input type="text" id="myInput" value="请输入内容">
        <button type="submit" id="myButton">提交</button>
    </form>
    <script>
      $("form").on("submit", function(event) {
        event.stopPropagation();
      });
    </script>

运行代码

4:使用事件委托

使用 on 方法委托事件处理程序

<button id="myButton">点击我</button>
    <script>
      $(document).on('click', '#myButton',{foo: "bar"}, function(event) {
                alert(event.data.foo);
       });
    </script>

运行代码

5:绑定多个事件

使用 on 方法绑定多个事件

<script>
    $(document).ready(function(){
      $("p").on("mouseover mouseout",function(){
        $("p").toggleClass("intro");
      });
    });
    </script>
<style type="text/css">
.intro
{
font-size:150%;
color:red;
}
</style>
<body>
    <p>将鼠标移动到这里,再将鼠标移出这里</p>
</body>

运行代码

6:自定义事件

<script>

    $(document).ready(function(){
      $("p").on("myOwnEvent", function(event, showName, myValue){
        $(this).text(myValue + "!的全名是!" + showName).show();
      });
      $("button").click(function(){
        $("p").trigger("myOwnEvent",["李明","小明"]);
      });
    });
</script> 
<body>
    <button>按钮</button>
    <p>点击此按钮触发事件</p>
</body>

运行代码

7:点击任何一个段落时,就在它后面追加一个段落。

注意,.on() 会为任何段落添加事件,包括新生成的段落,因为当事件冒泡到已经存在的 body 元素上时,就会触发绑定的事件。

<style>
    p { background:yellow; font-weight:bold; cursor:pointer;
        padding:5px; }
    p.over { background: #ccc; }
    span { color:red; }
</style>
<body>
      <p>点击我!</p>
    <span></span>
    <script>
    var count = 0;
    $("body").on("click", "p", function(){
      $(this).after("<p>新的段落! "+(++count)+"</p>");
    });
    </script>
     
</body>

运行代码

8:使用 preventDefault 方法,取消链接的默认动作。

<a href="http://www.xuandaima.com">炫代码</a>
    <script>
       $("body").on("click", "a", function(event){
        event.preventDefault();
        });
    </script>

运行代码

注意事项

在使用 jQuery on 方法时,需要注意以下几点:

1. 事件处理函数:on 方法的事件处理函数可以是一个函数表达式,也可以是一个函数名。如果是一个函数表达式,需要注意函数的作用域和 this 的指向。

2. 事件冒泡:当一个元素上发生事件时,该事件会向上冒泡到其祖先元素上。如果不希望事件冒泡到祖先元素上,可以使用 `event.stopPropagation()` 方法来阻止事件冒泡。

3. 解绑事件:如果不再需要某个元素上的事件处理函数,可以使用 `off()` 方法来解绑事件。例如,`$("#myButton").off("click")` 将会解绑按钮元素上的点击事件。要绑定一个事件,并且只运行一次,然后删除自己, 请参阅.one()。

4事件名称和命名空间:事件名称可以添加指定的event namespaces(命名空间) 来简化删除或触发事件。例如,"click.myPlugin.simple"为 click 事件同时定义了两个命名空间 myPlugin 和 simple。通过上述方法绑定的 click 事件处理,可以用.off("click.myPlugin") 或 .off("click.simple")删除绑定到相应元素的Click事件处理程序,而不会干扰其他绑定在该元素上的“click(点击)” 事件。

5直接和委托的事件

如果省略selector或者是null,那么事件处理程序被称为直接事件 或者 直接绑定事件 。每次选中的元素触发事件时,就会执行处理程序,不管它直接绑定在元素上,还是从后代(内部)元素冒泡到该元素的。

当提供selector参数时,事件处理程序是指为委派 事件(注:通常也有很多人叫它代理事件)。事件不会在直接绑定的元素上触发,但当selector参数选择器匹配到后代(内部元素)的时候,事件处理函数才会被触发。

6将数据传递到处理程序

如果data参数给.on()并且不是null 或者 undefined,那么每次触发事件时,event.data都传递给处理程序。data参数可以是任何类型,但如果是字符串类型时,那么selector参数必须提供,或明确地传递null,这样的 data 参数不会误认为是选择器。最好是使用一个对象(键值对) ,所以可以作为属性传递多个值。


总之,jQuery on 方法是一个非常强大和灵活的事件处理方法,它可以大大简化 JavaScript 中的事件处理代码。在使用 on 方法时,需要注意事件类型、事件处理函数、事件冒泡、解绑事件以及兼容性等问题,以确保代码的正确性和稳定性。