jQuery技术

jQuery event事件对象用法浅析

字号+ 作者:H5之家 来源:H5之家 2016-01-14 14:17 我要评论( )

本人对jquery的event不懂,搜索了很多关于jquery event事件介绍,下面我来记录一下,有需要了解jquery event事件用法的朋友可参考,希望此文件对各位有所帮助。

jQuery event事件对象用法浅析 来源:   时间:2013-09-05 20:25:16   阅读数:

[导读] 本人对jquery的event不懂,搜索了很多关于jquery event事件介绍,下面我来记录一下,有需要了解jquery event事件用法的朋友可参考,希望此文件对各位有所帮助。最终传入事件处理程序的 event 其实已经被 j

本人对jquery的event不懂,搜索了很多关于jquery event事件介绍,下面我来记录一下,有需要了解jquery event事件用法的朋友可参考,希望此文件对各位有所帮助。

最终传入事件处理程序的 event 其实已经被 jQuery 做过标准化处理,

其原有的事件对象则被保存于 event 对象的 originalEvent 属性之中,

每个 event 都是 jQuery.Event 的实例,其原型链中保存有六个方法,

 代码如下 复制代码

jQuery.Event.prototype = {
    preventDefault: function() {
        // 取消事件默认行为
    },
    stopPropagation: function() {
        // 取消事件向上冒泡
    },
    stopImmediatePropagation: function() {
        this.isImmediatePropagationStopped = returnTrue;
        this.stopPropagation();
    },
    isDefaultPrevented: returnFalse,
    isPropagationStopped: returnFalse,
    isImmediatePropagationStopped: returnFalse
};

对于取消事件默认行为与向上冒泡大家肯定不陌生,让我们把重点放在第三个方法上,

从源码上我们知道其调用了stopPropagation方法,所以他第一个作用就是取消冒泡。

 代码如下 复制代码

for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
    matched = handlerQueue[ i ];
    ...
    for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
        ...
    }
}

让我先来简单阐述下 jQuery 的事件绑定机制,这样能让大家更好理解他的第二个作用。

使用 jQuery 绑定的事件处理程序会按其类型与绑定顺序存于节点相应的events对象中,

当事件触发时则使用 $._data 取出events中对应事件的处理程序列队以便后续遍历执行。

内层循环的 matched.matches 中保存事件触发时当前节点需执行的事件处理程序列队,

所以当 isImmediatePropagationStopped 为 true 时则会阻止当前事件下该节点的后续事件处理程序执行。

最后来个简单的

 代码如下 复制代码

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="gbk">
    <title>jQuery event 对象浅析</title>
</head>
<body>
    <a id="J_btn" href="javascript:;">点我吧!</a>
    <script type="text/javascript" src="../js/lib/jquery.js"></script>
    <script type="text/javascript">

        $("body").delegate("#J_btn", "click", function() {
            alert("冒泡至 BODY");
        });

        var $btn = $("#J_btn");

        $btn.click(function(event) {
            event.stopImmediatePropagation();
            alert("第一次点击");
        });

        $btn.click(function() {
            alert("第二次点击");
        });

    </script>
</body>
</html>

希望能帮助大家更好的理解!

jQuery.event 事件机制 focusin/ focusout 事件


首先来看 jQuery.simulate() 方法,该方法基于原生事件实现可冒泡事件。源码如下:

 

 代码如下 复制代码

simulate: function(type, elem, event, bubble) {
        var evt = jQuery.extend(new jQuery.Event(), event, {
                type: type,
                isSimulated: true,
                originalEvent: {}
            }
        );
       
        if (bubble) {         
            jQuery.event.trigger(evt, null, elem);     // 直接程序触发,这里可冒泡
        } else {
            jQuery.event.dispatch.call(elem, evt);
        }
       
        if (evt.isDefaultPrevented()) {
            event.preventDefault();        //由于模拟的缘故,基础对象应该同时更改
        }
    }

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jQuery 动态添加与统计 实现代码

    jQuery 动态添加与统计 实现代码

    2015-11-04 14:05

  • jQuery css()选择器使用说明

    jQuery css()选择器使用说明

    2015-11-01 11:07

  • JQuery处理json与ajax返回JSON实例

    JQuery处理json与ajax返回JSON实例

    2015-10-22 12:28

网友点评