主要就是Ecshop的AJAX传输类,transport.js中重写了object的对象原型,从而导致了与jq框架的冲突。

解决:

1. 删除transport.js中587行 - 636行中关于object.prototype.toJSONString的定义

2. 自定义一个方法用于object对象的json序列化

如下

function obj2str(o)

{

//开始

var r = [];

if(typeof o =="string") return "\""+o.replace(/([\'\")/g,]\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";

if(typeof o =="undefined") return "undefined";

if(typeof o == "object"){

if(o===null) return "null";

else if(!o.sort){

for(var i in o)

{

if(i!="toJSONString") //增加判断,清除对object原型的定义加入到json中

r.push("\""+i+"\""+":"+obj2str(o));

}

r="{"+r.join()+"}";

}else{

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

r.push(obj2str(o))

r="["+r.join()+"]"

}

return r;

}

return o.toString();

//结束

}

3. 在模板页和js脚本中所有对于obj.toJSONString()的地方,一概替换为obj2str(obj)

4. 重写好后发现compare.js, 主要重写其中的定时器功能。 将以下代码替换到compare.js中

var Compare = new Object();

Compare = {

add : function(goodsId, goodsName, type)

{

var count = 0;

for (var k in this.data)

{

if (typeof(this.data[k]) == "function")

continue;

if (this.data[k].t != type) {

alert(goods_type_different.replace("%s", goodsName));

return;

}

count++;

}

if (this.data[goodsId])

{

alert(exist.replace("%s",goodsName));

return;

}

else

{

this.data[goodsId] = {n:goodsName,t:type};

}

this.save();

this.init();

},

init : function(){

this.data = new Object();

var cookieValue = document.getCookie("compareItems");

if (cookieValue != null) {

this.data = cookieValue.parseJSON();

}

if (!this.compareBox)

{

this.compareBox = document.createElement_x("DIV");

var submitBtn = document.createElement_x("INPUT");

this.compareList = document.createElement_x("UL");

this.compareBox.id = "compareBox";

this.compareBox.style.display = "none";

this.compareBox.style.top = "200px";

this.compareBox.align = "center";

this.compareList.id = "compareList";

submitBtn.type = "button";

submitBtn.value = button_compare;

this.compareBox.appendChild(this.compareList);

this.compareBox.appendChild(submitBtn);

submitBtn.onclick = function() {

var cookieValue = document.getCookie("compareItems");

var obj = cookieValue.parseJSON();

var url = document.location.href;

url = url.substring(0,url.lastIndexOf('/')+1) + "compare.php";

var i = 0;

for(var k in obj)

{

if(typeof(obj[k])=="function")

continue;

if(i==0)

url += "?goods[]=" + k;

else

url += "&goods[]=" + k;

i++;

}

if(i<2)

{

alert(compare_no_goods);

return ;

}

document.location.href = url;

}

document.body.appendChild(this.compareBox);

}

this.compareList.innerHTML = "";

var self = this;

for (var key in this.data)

{

if(typeof(this.data[key]) == "function")

continue;

var li = document.createElement_x("LI");

var span = document.createElement_x("SPAN");

span.style.overflow = "hidden";

span.style.width = "100px";

span.style.height = "20px";

span.style.display = "block";

span.innerHTML = this.data[key].n;

li.appendChild(span);

li.style.listStyle = "none";

var delBtn = document.createElement_x("IMG");

delBtn.src = "themes/default/images/drop.gif";

delBtn.className = key;

delBtn.onclick = function(){

document.getElementByIdx_x("compareList").removeChild(this.parentNode);

delete self.data[this.className];

self.save();

self.init();

}

li.insertBefore(delBtn,li.childNodes[0]);

this.compareList.appendChild(li);

}

if (this.compareList.childNodes.length > 0)

{

this.compareBox.style.display = "";

this.timer = window.setInterval("flowdiv('compareBox')", 50);

}

else

{

this.compareBox.style.display = "none";

window.clearInterval(this.timer);

this.timer = 0;

}

},

save : function()

{

var date = new Date();

date.setTime(date.getTime() + 99999999);

document.setCookie("compareItems", obj2str(this.data));

},

lastScrollY : 0

}

//用于定时器的自动滚动的层

lastScrollY=0;

function flowdiv(domid){

   var diffY;

    if (document.documentElement && document.documentElement.scrollTop)

      diffY = document.documentElement.scrollTop;

    else if (document.body)

      diffY = document.body.scrollTop

    else

      {}

    //alert(diffY);

    percent=.1*(diffY-lastScrollY);

    if(percent>0) percent=Math.ceil(percent);

    else percent=Math.floor(percent);

    document.getElementByIdx_x(domid).style.top=parseInt(document.getElementByIdx_x(domid).style.top)+percent+"px";

    lastScrollY=lastScrollY+percent;

    //alert(lastScrollY);

}

如何全面解决ECSHOP的jquery冲突的更多相关文章

  1. Ecshop与Jquery冲突的完美解决方案

    ecshop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的.   但恰恰的,在封装JSON各种方法的同时对objec ...

  2. ecshop和jQuery冲突

    这个问题看ecshop的论坛里有很多帖子,解决方案就好几种,但是有几个标注完美解决方案的需要更改很多文件,对于我们这种初学者出现了问题的话是不知道怎么调试的. 找到一个很简单的解决方案,论坛里说只能解 ...

  3. ecshop之transport和jquery冲突之完美解决方案

    众所周知:ecshop的transport.js文件和Jquery是冲突的,两个文件不能同时调用,现给出以下完美解决方案:原因分析:在transport.js文件中,大概 580行到590行之间,这个 ...

  4. 关于ecshop中jquery与js冲突解决的方案

    ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的.   但恰恰的,在封装JSON各种方法的同时对objec ...

  5. Discuz!和jQuery冲突的解决办法

    Common.js是官方自带的,我没改过它,所以不可能出错,所以问题就应该是两者冲突了.导致的结果我也发现了,前台的DIY功能不能用了.   我还花了很多时间在那里研究冲突的地方,后来还是没能解决.之 ...

  6. discuz教程:discuz模板js与jQuery冲突的解决方案

    今天在做discuz模板的时候,用到jquery的时候和原来主题js冲突.这个主要是Discuz X使用了$(id)作为dom节点的获取方法,而$符号刚好与jQuery的默认符号相冲突. 以下是基于之 ...

  7. jquery冲突

    今天修改一个项目发现,前辈们自己写的一些方法和jquery冲突了,也就是$的冲突,以至于自己用jquery编写的新功能无法正常使用,细究后发现解决办法如下:使用 noConflict() 方法为 jQ ...

  8. JQuery冲突问题,以及含有jquery的框架与jquery冲突

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 解决Ecshop因为动态ip问题登录后台自动退出

    解决Ecshop因为动态ip问题登录后台自动退出 PHP  铁匠  2年前 (2013-07-21)  1130℃  0评论 修改lib_base.php文件real_ip()函数,添加以下代码即可解 ...

随机推荐

  1. 配置 Windows 下的 nodejs C++ 模块编译环境

    根据 node-gyp 指示的 Windows 编译环境说明, 简单一句话就是 "Python + VC++ 编译环境". 所有需要的安装文件, 我都下载好放到百度云盘了: nod ...

  2. 关于java对Excel的读取

    /*注意:读取的Excel文件 请另存为2003版本的Excel,否则可能会报错别忘记导入第三方的jar包*/package com.zzp.ExcelParse;import jxl.Cell;im ...

  3. sql数据库表被锁,无法查询

    查看被锁表:   select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName    ...

  4. Git 撤消

    现在添加一个新的文件 t.c, 写一行 int a; 用 git add . 添加跟踪,当前状态 $ git status On branch master Changes to be committ ...

  5. 满足NABC的软件创意

    创意——几个简单的想法 ——崔海营 创意一:               大学生自行车租借一点通 随着大学生人数的不断增多以及大学生活的空闲时间十分充裕,许多同学十分乐意到一些附近的景点去游玩或者烧烤 ...

  6. MySQL主从同步配置

    如果主从配置之前安装了云平台,请停止云平台后在进行mysql主从配置. 1. 登录master数据库,检查数据库端口防火墙设置,允许远程客户连接,如果没有,执行以下操作. 执行命令:iptables  ...

  7. Bootstrap <基础十八>面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...

  8. C#如何获取项目中的其他文件夹的路径

    //一般用string p=AppDomain.CurrentDomain.BaseDirectory+"\\其他"; //其它的还有 string str1 =Process.G ...

  9. Mysql数据库的一些命令_LInux

    查看当前数据库的版本,因为有些命令在不同版本中 用法有可能不一样,注意 -V 是大写字母V[root@localhost ~]# mysqladmin -Vmysqladmin  Ver 8.42 D ...

  10. linux下查看tomcat和jdk版本号

    linux下查看tomcat和jdk版本号的命令: 这个需要进入到bin目录下面 ,执行"./version.sh"命令 [root@hncsweb bin]# ./version ...