zoukankan      html  css  js  c++  java
  • 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]

  • 相关阅读:
    14_部署LNMP环境、构建LNMP平台、地址重写
    13_搭建Nginx服务器、配置网页认证、基于域名的虚拟主机、ssl虚拟主机
    12_rsync+SSH同步
    11_DNS子域授权、分离解析、缓存DNS服务器
    10_自定义yum仓库、源码编译安装
    09_parted分区工具、交换分区、链路聚合
    08_简单MariaDB数据库的管理
    bzoj1396
    bzoj4154
    bzoj3489
  • 原文地址:https://www.cnblogs.com/woohblog/p/3093973.html
Copyright © 2011-2022 走看看