• jQuery的浏览器兼容性策略(转载)


    之前写过一篇日志(http://shawphy.com/article.asp?id=34),说FF没有cancelBubble,所以要做兼容,其实多虑了,JQ已经为我们做好兼容性了。

    也就是说,要阻止冒泡,直接使用
    $("a").click(function(e) {
    e.stopPropagation();
    })
    这样即可。
    她还修正了preventDefault ,target ,relatedTarget,pageX/Y,event.which(确定按了键盘或者鼠标上的哪个按键。)

    多的不说,大家自己看代码吧(jQuery 1.2.3 /line:2093-2149)

    [quote] fix: function(event) {
    // store a copy of the original event object
    // and clone to set read-only properties
    var originalEvent = event;
    event = jQuery.extend({}, originalEvent);

    // add preventDefault and stopPropagation since
    // they will not work on the clone
    event.preventDefault = function() {
    // if preventDefault exists run it on the original event
    if (originalEvent.preventDefault)
    originalEvent.preventDefault();
    // otherwise set the returnValue property of the original event to false (IE)
    originalEvent.returnValue = false;
    };
    event.stopPropagation = function() {
    // if stopPropagation exists run it on the original event
    if (originalEvent.stopPropagation)
    originalEvent.stopPropagation();
    // otherwise set the cancelBubble property of the original event to true (IE)
    originalEvent.cancelBubble = true;
    };

    // Fix target property, if necessary
    if ( !event.target )
    event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either

    // check if target is a textnode (safari)
    if ( event.target.nodeType == 3 )
    event.target = originalEvent.target.parentNode;

    // Add relatedTarget, if necessary
    if ( !event.relatedTarget && event.fromElement )
    event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;

    // Calculate pageX/Y if missing and clientX/Y available
    if ( event.pageX == null && event.clientX != null ) {
    var doc = document.documentElement, body = document.body;
    event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) – (doc.clientLeft || 0);
    event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) – (doc.clientTop || 0);
    }

    // Add which for key events
    if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
    event.which = event.charCode || event.keyCode;

    // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
    if ( !event.metaKey && event.ctrlKey )
    event.metaKey = event.ctrlKey;

    // Add which for click: 1 == left; 2 == middle; 3 == right
    // Note: button is not normalized, so don't use it
    if ( !event.which && event.button )
    event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));

    return event;
    },
    [/quote]

  • 相关阅读:
    (转载)博客园如何转载别人的文章
    python实现凯撒密码、凯撒加解密算法
    python新手学习可变和不可变对象
    Pycharm中配置远程Docker运行环境的教程图解
    python新手学习使用库
    python的help函数如何使用
    python编写softmax函数、交叉熵函数实例
    python能开发游戏吗
    python属于解释语言吗
    python的控制结构之For、While、If循环问题
  • 原文地址:https://www.cnblogs.com/woohblog/p/3093973.html
Copyright © 2020-2023  润新知