如何全面解决ECSHOP的jquery冲突
主要就是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冲突的更多相关文章
- Ecshop与Jquery冲突的完美解决方案
ecshop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的. 但恰恰的,在封装JSON各种方法的同时对objec ...
- ecshop和jQuery冲突
这个问题看ecshop的论坛里有很多帖子,解决方案就好几种,但是有几个标注完美解决方案的需要更改很多文件,对于我们这种初学者出现了问题的话是不知道怎么调试的. 找到一个很简单的解决方案,论坛里说只能解 ...
- ecshop之transport和jquery冲突之完美解决方案
众所周知:ecshop的transport.js文件和Jquery是冲突的,两个文件不能同时调用,现给出以下完美解决方案:原因分析:在transport.js文件中,大概 580行到590行之间,这个 ...
- 关于ecshop中jquery与js冲突解决的方案
ECShop把AJAX事件和JSON解析的模块放在common/transport.js之中,可以说它也有自己封装的一套工具,这其实是很正常的. 但恰恰的,在封装JSON各种方法的同时对objec ...
- Discuz!和jQuery冲突的解决办法
Common.js是官方自带的,我没改过它,所以不可能出错,所以问题就应该是两者冲突了.导致的结果我也发现了,前台的DIY功能不能用了. 我还花了很多时间在那里研究冲突的地方,后来还是没能解决.之 ...
- discuz教程:discuz模板js与jQuery冲突的解决方案
今天在做discuz模板的时候,用到jquery的时候和原来主题js冲突.这个主要是Discuz X使用了$(id)作为dom节点的获取方法,而$符号刚好与jQuery的默认符号相冲突. 以下是基于之 ...
- jquery冲突
今天修改一个项目发现,前辈们自己写的一些方法和jquery冲突了,也就是$的冲突,以至于自己用jquery编写的新功能无法正常使用,细究后发现解决办法如下:使用 noConflict() 方法为 jQ ...
- JQuery冲突问题,以及含有jquery的框架与jquery冲突
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 解决Ecshop因为动态ip问题登录后台自动退出
解决Ecshop因为动态ip问题登录后台自动退出 PHP 铁匠 2年前 (2013-07-21) 1130℃ 0评论 修改lib_base.php文件real_ip()函数,添加以下代码即可解 ...
随机推荐
- Oracle逻辑备份与恢复
1. 备份的类型 按照备份方式的不同,可以把备份分为两类: 1.1 逻辑备份:指通过逻辑导出对数据进行备份.将数据库中的用户对象导出到一个二进制文件中,逻辑备份使用导入导出工具:EXPDP/IMP ...
- java 文件按行读取
/*代码写的可能有点累赘里面的好多东西写的不太好 还望各位大佬能提点一二,不胜感激*/package com.zzp.fileopration;import java.io.*;/** * Creat ...
- react验证码倒计时
<!DOCTYPE html> <html> <head> <script src="../build/react.js">< ...
- jquery中select的应用
//得到select项的个数 jQuery.fn.size = function(){ return jQuery(this).get(0).options.length; } //获得选中项的索引 ...
- bzoj2006: [NOI2010]超级钢琴
题意:给一个序列(n<=500000),要求选定k个不同区间,使得区间长度在L,R之间,并使得k个区间和之和最大,输出这个最大值. 刚拿到题的时候想的是,对于每个点,如果以它开头,那么之后的L- ...
- ZTE and TP-Link RomPager - DoS Exploit
#!/usr/bin/env python # -*- coding: utf-8 -*- # Exploit Title: ZTE and TP-Link RomPager DoS Exploit ...
- MFC之键盘和键盘消息处理
今天学习了最基本的MFC操作,键盘及键盘消息函数,跟着书中的内容自己编了个小程序.检测用户是否同时按下SHIFT和B键 第一步:先是建了一个单文档模式的MFC程序,添加了键盘消息及处理函数.键盘消息处 ...
- Yii2的邮件配置
'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' =&g ...
- 专家解读:BPM与OA的区别
演进历程 传统OA 模块化架构,仅能满足管理执行的刚性效率,系统的专业化程度有限. BPM 平台化架构,管理要求精细化程度高,系统更专业化,更注重整合. BPM SAAS 基于云架构,跨组织社交化,系 ...
- angular初步认识一
最近比较流行MVC前端框架开发,最近研究了一个框架AngularJS框架 不说那么多,先上例子,我是个代码控 <!DOCTYPE html> <html lang="en& ...