事件

事件绑定

我们一般使用的是bind()方法

bind()方法有3个参数:

第一个参数是事件类型,包括 blur、focus、load、resize、scroll、unload、click、dblick、

mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、

select、submit、keydown、keypress、keyup、和error等,当然也可以是自定义名称。

第二个参数为可选参数,作为event.data属性值传递给事件对象的额外数据对象。

第三个参数则是用来绑定的函数处理。

合成事件

jQuery有两个合成事件——hover()方法,类似前面讲过的ready()方法,hover()方法和toggle()方法都属于jQuery自定义的方法。

hover()方法

hover()方法的语法结构为: hover(enter,leave);

hover()方法用于模拟光标悬停事件。当光标移动到元素上时,会触发指定的第1个函数(enter);

当光标移出这个元素时,会触发指定的第2个函数(leave)。

示例:

$(function () {
            $("#pane1 h5.head").hover(function () {
                $(this).next().show();
            }.function(){
                $(this).next().hide();
            });
});

toggle()方法

toggle()方法的语法结构为: toggle(fn1,fn2,…fnN);

toggle()方法用于模拟鼠标连续单击事件。第1次单击元素,触发指定的第1个函数(fn1);当再次单击同一元素时,则触发指定的第2个函数(fn2);如果有更多函数,则依次触发,直到最后一个。随后的每次单击都重复对这几个函数的轮番调用。

事件冒泡

什么是事件冒泡呢?

在页面上可以有多个事件,也可以多个元素响应同一个事件。假设网页上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了click事件,同时<body>元素上也绑定了click事件。

例如:

$(function () {
            //为span元素绑定click事件
            $('span').bind("click".function(){
                var txt = $('#msg').html(txt);
            });
            //为div元素绑定click事件
        $('#content').bind("click".function(){
            var txt = $('#msg').html()+"<p>外层div元素被单击<p/>";
            $('#msg').html(txt);
        });
        //为body元素绑定click事件
            $("body").bind("click".function(){
                var txt = $('#msg').html()+"<p>body元素被单击.<p/>";
            $('#msg').html(txt);
            });
        })
    </script>
</head>
<body>
    <div id="countent">
        外层div元素
        <span>内层span元素</span>
        外层div元素
    </div>
    <div id="msg"></div>

事件冒泡引发的问题

事件冒泡可能会引起预料之外的效果。上例中,本来只想触发<span>元素的click事件,然而<div>元素和<body>元素的click事件也同时被触发了。因此,有必要对事件的作用范围进行限制。

移除事件

在绑定事件的过程中,不仅可以为同一个元素绑定多个事件,也可以为多个元素绑定同一个事件。

unbind(type [,data])     //data是要移除的函数

    $('#btn').unbind("click"); //移除click

    $('#btn').unbind(); //移除所有
    对于只需要触发一次的,随后就要立即解除绑定的情况,用one()

    $('#btn').one("click",function(){.......});
    模拟操作

    可以用trigger()方法完成模拟操作。

    $('#btn').trigger("click");
    $('#btn').click();

    触发自定义事件

    $('#btn').bind("myclick",function(){....});

    $('#btn').trigger("myclick");
    传递数据

    trigger(type [,data])

    $('#btn').bind("myclick",function(event,message1,message2){...........});

    $('#btn').trigger("myclick",["传给message1","传给message2"]);

    执行默认操作
    $("input").trigger("focus");

        //不仅会触发input元素绑定的focus事件,还会触发默认操作——得到焦点。

    $("input").triggerHandler("focus");

        //只触发绑定事件,不执行浏览器默认操作

    其他用法

    绑定多个事件类型

    $("div").bind("mouseover mouseout",function(){.....});

    添加事件命名空间

    $("div").bind("click.plugin",function(){......});

    在所绑定的世界类型后面添加命名空间,这样在删除事件时只需要指定命名空间即可。

        $("div").unbind(".plugin");   //删除空间内的事件

    $("div").trigger("click!"); //触发所以不包含在命名空间中的click方法

    如果包含在命名空间的也要触发:

        $("div").trigger("click");

posted @ 2016-05-23 17:45  Light.Elegant  阅读(247)  评论(1编辑  收藏  举报