免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1660 | 回复: 0

ECSHOP2.72与JQUERY冲突的解决方法及冲突原因 [复制链接]

论坛徽章:
0
发表于 2011-10-09 11:02 |显示全部楼层
我自己也比较喜欢JQUERY.很方便.不过ECSHOP的JS却与JQ冲突....找了很多方法...都感觉怪怪的.
后来无意发现ECSHOP官方模板堂的效果也是JQUERY的....于是看了下官方的解决方法.
然后根据这个方法.在网上也查到了其冲突的原因
分享给大家.

冲突的地方主要有2个.
第一个冲突呢是在transport.js文件中587-639行Object.prototype.toJSONString = function () {

        var a = ['{'],  // The array holding the text fragments.

            b,          // A boolean indicating that a comma is required.

            k,          // The current key.

            v;          // The current value.



        function p(s) {

            ...

        }



        // Iterate through all of the keys in the object, ignoring the proto chain.



        for (k in this) {

            ...

            }

        }



          // Join all of the fragments together and return.

        a.push('}');

        return a.join('');

    };
复制代码代码过长...截断...在587-639

冲突原因
这段代码用于格式化json,他重写了object的结构,

导致于js框架冲突。
冲突的原因是jquery给一个object增加了很多元素,
那么在Object.prototype.toJSONString = function ()
这个函数中 for (k in this) 语句中进行了无数次的循环,
导致网页很卡,并且在IE中会报错。

解决方法

根本的解决办法是不用transport.js中的json功能,
那么就要有一个相同的功能来代替它,
首先要把transport.js中的

去掉整个方法.
587-639行
    Object.prototype.toJSONString = function
增加obj2str.js,文件在后面下载

由于实现json功能的函数有区别,所以要麻烦改掉原ecshop中各个地方用到的toJSONString()函数。
页面中使用了类似   ***.toJSONString()
替换为 obj2str(***)
例Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
复制代码改Ajax.call('flow.php?step=add_to_cart', 'goods=' + obj2st(goods), addToCartResponse, 'POST', 'JSON');
复制代码第二个冲突
在文件golbal.js中
//封装getEelementById函数function $()

{

  var elements = new Array();

  for (var i = 0; i < arguments.length; i++) {

    var element = arguments;

    if (typeof element == 'string')

      element = document.getElementById(element);



    if (arguments.length == 1)

      return element;



    elements.push(element);

  }



  return elements;

}
复制代码很显然.此方法与jquery 的  $()工厂冲突
把此方法改变换成


function getId()
{
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments;
    if (typeof element == 'string')
      element = document.getElementById(element);

    if (arguments.length == 1)
      return element;

    elements.push(element);
  }

  return elements;
}

或者有jquery的页面不引用golbal.js

把所有用到$()方法改造即可..........

文章来源:http://www.phphubei.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP