JavaScript 学习-40.jQuery 绑定事件 on 和 bind

前言

jquery 有四种绑定事件的方式:on, bind, delegate,live。其中 live() 方法已被移除。
自 jQuery 版本 1.7 起,on() 方法是 bind()、live() 和 delegate() 方法的新的替代。
$(selector).off(type)为元素解除绑定的事件

on 绑定事件

基本语法

$(selector).on(event,childSelector,data,function)
参数 描述
event 必需。事件的类型一个或多个,由空格分隔多个事件值。
childSelector 可选。规定只能添加到指定的子元素上的事件处理程序(且不是选择器本身,比如已废弃的 delegate() 方法)。
data 可选。事件额外的参数。使用函数的event.data获取
function 可选。事件的执行函数

给button按钮绑定click事件示例

    <div>
        <button id="btn1">按钮1</button>
    </div>
<script>
    // button绑定click 事件
    $('#btn1').on('click', function () {
        // do something....
        console.log('btn1 点击 ...')
    })
</script>

给同一个元素,多个事件绑定同一个function,event 事件名称可以中间空格隔开传多个

    <div id="demo">
        <button id="btn1">按钮1</button>
        <button id="btn2">按钮2</button>
        <button id="btn3">按钮3</button>
    </div>
<script>
    // button绑定click 事件
    $('#btn1').on('click mouseover', function () {
        // do something....
        console.log('btn 点击 ...')
    })
</script>

可以给多个button按钮绑定同一个事件

    <div id="demo">
        <button id="btn1">按钮1</button>
        <button id="btn2">按钮2</button>
        <button id="btn3">按钮3</button>
    </div>
<script>
    // button绑定click 事件
    $('#demo>button').on('click', function () {
        // do something....
        console.log('btn 点击 ...')
    })
</script>

childSelector 绑定子元素

childSelector 参数可以给子元素绑定事件

    <div id="demo">
        <button id="btn1">按钮1</button>
        <button id="btn2">按钮2</button>
        <button id="btn3">按钮3</button>
    </div>
<script>
    // button 绑定click 事件
    $('#demo').on('click', '#btn1', function () {
        // do something....
        console.log('btn 点击 ...')
    })
</script>

给子元素绑定事件,还能解决一个问题,比如我们新增的元素无法绑定事件问题

<body>
    <div id="demo">
        <button id="btn1">新增元素</button>
    </div>
<script>
    $(document).ready(function () {
        // 点btn1按钮新增元素
        $('#btn1').on('click', function () {
            // do something....
            $('body').append('<div><button id="btn2">按钮2</button></div>')
        })
        // 绑定新增#btn2元素click事件
        $(document).ready(function () {
                $('#btn2').on('click', function () {
                // do something....
                console.log('btn 点击 ...')
            })
    })
    })
</script>

点btn1新增元素btn2,此时点btn2无法获得点击事件

主要原因是事件是在 dom 加载的时候就已经完成了,新增的 div 元素 click 事件就无效了。
解决办法:把事件绑定在body元素上,再绑定childSelector 子元素事件

        // 绑定新增#btn2元素click事件
        $(document).ready(function () {
                $('body').on('click', '#btn2', function () {
                // do something....
                console.log('btn 点击 ...')
            })
    })

off() 方法

off() 方法通常用于移除通过 on() 方法添加的事件处理程序。
自 jQuery 版本 1.7 起,off() 方法是 unbind()、die() 和 undelegate() 方法的新的替代品。
该方法给 API 带来很多便利,我们推荐使用该方法,它简化了 jQuery 代码库。

$("#id").click(function(){
    $("button").off("click");
});

bind() 方法

bind只能给符合条件的元素本身添加事件
on可以将子元素的事件委托给父元素进行处理,而且可以给动态添加的元素加上绑定事件

语法

$(selector).bind(event,data,function,map)
参数 描述
event 必需。规定添加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。
data 可选。规定传递到函数的额外数据。
function 必需。规定当事件发生时运行的函数。
map 规定事件映射 ({event:function, event:function, ...}),包含要添加到元素的一个或多个事件,以及当事件发生时运行的函数。

比如给 div 下的所有 button 添加 click 事件

    <div id="demo">
        <button id="btn1">按钮1</button>
        <button id="btn2">按钮2</button>
        <button id="btn3">按钮3</button>
    </div>

可以用bind

         // 点 button 添加绑定
         $('#demo button').bind('click', function () { 
              // do something....
            console.log('btn 点击 ...')
        });

也可以用on

       $('#demo').on('click', 'button', function () {
            // do something....
            console.log('btn 点击 ...')
        })

使用区别:
1.用on绑定实际上是委托给了父级div,也就是只给一个元素绑定了事件
2.bind用选择器选择了div下的所有button元素 依次绑定了事件。如果有很多很多子元素区别就很大了, bind会严重影响性能。
3.新增的元素,bind无法绑定事件,on可以给新增元素绑定事件

总的来说一般用 on 就可以替代其余几个了。

posted @ 2022-06-03 17:32  上海-悠悠  阅读(262)  评论(0编辑  收藏  举报