- 論壇徽章:
- 0
|
我自己也比較喜歡JQUERY.很方便.不過(guò)ECSHOP的JS卻與JQ沖突....找了很多方法...都感覺(jué)怪怪的.
后來(lái)無(wú)意發(fā)現(xiàn)ECSHOP官方模板堂的效果也是JQUERY的....于是看了下官方的解決方法.
然后根據(jù)這個(gè)方法.在網(wǎng)上也查到了其沖突的原因
分享給大家.
沖突的地方主要有2個(gè).
第一個(gè)沖突呢是在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('');
};
復(fù)制代碼代碼過(guò)長(zhǎng)...截?cái)?..在587-639
沖突原因
這段代碼用于格式化json,他重寫了object的結(jié)構(gòu),
導(dǎo)致于js框架沖突。
沖突的原因是jquery給一個(gè)object增加了很多元素,
那么在Object.prototype.toJSONString = function ()
這個(gè)函數(shù)中 for (k in this) 語(yǔ)句中進(jìn)行了無(wú)數(shù)次的循環(huán),
導(dǎo)致網(wǎng)頁(yè)很卡,并且在IE中會(huì)報(bào)錯(cuò)。
解決方法
根本的解決辦法是不用transport.js中的json功能,
那么就要有一個(gè)相同的功能來(lái)代替它,
首先要把transport.js中的
去掉整個(gè)方法.
587-639行
Object.prototype.toJSONString = function
增加obj2str.js,文件在后面下載
由于實(shí)現(xiàn)json功能的函數(shù)有區(qū)別,所以要麻煩改掉原ecshop中各個(gè)地方用到的toJSONString()函數(shù)。
頁(yè)面中使用了類似 ***.toJSONString()
替換為 obj2str(***)
例Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
復(fù)制代碼改Ajax.call('flow.php?step=add_to_cart', 'goods=' + obj2st(goods), addToCartResponse, 'POST', 'JSON');
復(fù)制代碼第二個(gè)沖突
在文件golbal.js中
//封裝getEelementById函數(shù)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;
}
復(fù)制代碼很顯然.此方法與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的頁(yè)面不引用golbal.js
把所有用到$()方法改造即可..........
文章來(lái)源:http://www.phphubei.com |
|