我正在和Magento合作,我厭倦了它的內置原型#%@ $ !! 我有「Pre-Select Colors Plus Swatches」擴展名,我也很生氣,因爲它沒有在頁面加載時預先選擇產品的顏色屬性。 我也花了幾個小時試圖讓jQuery noConflict()工作,但它崩潰了上述擴展。 所以我結束了那個jQuery代碼的工作,並且需要將它翻譯成Prototype,看起來不可能!此功能模擬點擊第一個可用的顏色選項,並在頁面加載後調用它。原型有可能嗎?怎麼樣 ???另外,如果你能想出一個奇蹟代碼來使jQuery和原型共存,這將是很好的。但我做了一些研究,並嘗試了很多方法來做到這一點...這個jQuery函數可能與原型?
回答
你應該嘗試在任何原型代碼之前加載jQuery,然後在其上調用noConflict。也許不要使用$j
作爲替代變量,而是使用jQuery
來替代,或者使用或其他非短的東西,並且碰撞機率很低。
//Load jQuery
<script>
var jQuery = jQuery.noConflict();
</script>
//Load other Javascripts including Prototype
原型和jQuery應該能夠很完美地共存,如果您加載的jQuery作爲第一個將被清除出原型踢甚至在全局命名空間的。這種方式有沒有辦法可以發生衝突。
你不需要jQuery的一個簡短的名稱,它並不需要在noConflict模式$
jQuery("div.atributoProduto.Cor img.swatch:not('.disabledSwatch'):first").parent().click();
加載jQuery的原型後,一個常見的錯誤,可能會導致衝突,jQuery將填充$
再清除它之前,它可以在加載過程中短暫的衝突。
如果你仍然想觸發與原型點擊:
$(myelement).simulate('click');
這應該做的一樣.click();
做的jQuery
我之前沒有在原型中包含jquery,因爲我希望它只能在應用程序的一部分中使用,但是如果首先爲整個應用程序加載它,那麼我將嘗試它。另外,如果有人可以將該jQuery代碼翻譯爲原型,這仍然很不錯。我認爲,蕭條的解決方案不會有一個以上的js庫。感謝名單! – Lennon 2012-07-18 13:18:24
@Lennon:我把它編輯爲答案的第二部分:) – bardiir 2012-07-18 13:23:44
我也試過了,我需要包含event.simulate.js,但我不知道爲什麼模擬不起作用,我甚至都不能使選擇器工作... – Lennon 2012-07-18 13:42:06
如果我不理解你的問題錯了,在原型js中使用$$應該解決這個問題。 Prototype也支持僞類,比如not,nth,first。你可以看看here。
那麼,我結束了100%的原型解決方案。模擬方法是在互聯網上找到的插件。我最大的問題是原型不像jQuery那樣多鏈接。
Event.simulate = function(element, eventName) {
var options = Object.extend({
pointerX: 0,
pointerY: 0,
button: 0,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
bubbles: true,
cancelable: true
}, arguments[2] || { });
var eventMatchers = {
'HTMLEvents': /load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll/,
'MouseEvents': /click|mousedown|mouseup|mouseover|mousemove|mouseout/
};
var oEvent, eventType = null;
for (var name in eventMatchers) {
if (eventMatchers[name].test(eventName)) eventType = name;
}
if (!eventType) throw new SyntaxError('Only HTMLEvents and MouseEvents interfaces are supported');
if (document.createEvent) {
oEvent = document.createEvent(eventType);
if (eventType == 'HTMLEvents') {
oEvent.initEvent(eventName, options.bubbles, options.cancelable);
}
else {
oEvent.initMouseEvent(eventName, options.bubbles, options.cancelable, document.defaultView,
options.button, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, $(element));
}
$(element).dispatchEvent(oEvent);
}
else {
options.clientX = options.pointerX;
options.clientY = options.pointerY;
oEvent = Object.extend(document.createEventObject(), options);
$(element).fireEvent('on' + eventName, oEvent);
}
}
function selecionaOnload(atributo){
var elem = $$("div.atributoProduto."+atributo+" img.swatch:not(.disabledSwatch)").first();
Event.simulate(elem, 'click');
if(atributo == 'Cor'){
$$("div.atributoProduto.Tamanho div.ico-esgotado").each(function(elem){
elem.remove();
});
marcaIndisponivel('Tamanho');
}
}
function marcaIndisponivel(atributo){
$$("div.atributoProduto."+atributo+" img.swatch.disabledSwatch").each(function(elem){
elem.insert({before:"<div class='ico-esgotado'></div>"});
});
}
Event.observe(window, 'load', function() {
//marcaIndisponivel('Cor');
selecionaOnload('Cor');
marcaIndisponivel('Tamanho');
//selecionaOnload('Tamanho');
});
- 1. javascript函數這和原型
- 2. 這個範圍,箭頭函數原型
- 3. 一個常用函數的jquery原型
- 4. 函數原型與否?
- 5. 這個Flash效果可能與jQuery的?
- 6. 這可能與jQuery或PHP?
- 7. JQuery原型功能
- 8. jQuery的覆蓋「這個」原型
- 9. 函數原型
- 10. 不能與原型
- 11. jQuery原型和構造函數鏈接
- 12. JQuery相當於原型Down() - 函數
- 13. jQuery live函數的原型相當於
- 14. 統一原型和JQuery的$函數
- 15. 將原型Ajax函數轉換爲jQuery
- 16. 是否有可能在javascript中使用這個原型?
- 17. JavaScript函數可以引用原型鏈上的原型嗎?
- 18. 使用原型來更改現有jQuery函數的功能
- 19. JavaScript原型與jQuery的.data()函數一起使用?
- 20. 如何避免jQuery的回調函數與原型的衝突
- 21. 爲什麼這個對象的原型的init函數不能運行
- 22. 爲什麼這個模板函數原型不能正常工作?
- 23. JavaScript原型函數
- 24. C++函數原型
- 25. C函數原型
- 26. 「......」 在函數原型
- 27. perl函數原型
- 28. C++函數原型?
- 29. 在原型函數中,'this'可能是未定義的嗎?
- 30. jQuery和highcharts與數學原型?
您嘗試過'noConflict()'而只是使用'$'而不是'$ j'嗎? – Joey 2012-07-18 12:07:06
鑑於選擇框本身是由JSON數據的javascript填充的,您可能需要等到*完成之後再嘗試選擇某個內容。 – benmarks 2012-07-18 12:11:42
正如問題中提到的那樣:「我也花了幾個小時試圖讓jQuery noConflict()正常工作,但它確實崩潰了前面提到的擴展名。」我不能使用$,因爲Magento默認使用$的原型,我嘗試使用jQuery與「var $ j = jQuery.noConflict();」沒有成功。 – Lennon 2012-07-18 12:12:48