2014-07-09 91 views
1

我想在Joomla網站上使用jQuery,而Joomla在noConflict模式下加載jQuery。我試圖將我的代碼包裝在(function($){ ... })(jQuery);中。jQuery noConflict模式

這工作:

function calculate() 
{ 
    var de = document.calculator.de.value; 
    var para = document.calculator.para.value; 
    var quantia = document.calculator.quantia.value; 
    var pais = jQuery("#para option:selected").text(); 
    var curr = (pais == "Brazil" ? "Reais" : "Euro"); 
    var tax = (pais == "Brazil" ? 0 : 3) 
    result = Math.round(quantia * para) + ' ' + curr; 
    jQuery('#result').text(result); 
    e.preventDefault(); 
    return false; 
} 

這不起作用(未捕獲的ReferenceError:不定義計算):

(function($){ 
function calculate() 
{ 
    var de = document.calculator.de.value; 
    var para = document.calculator.para.value; 
    var quantia = document.calculator.quantia.value; 
    var pais = $("#para option:selected").text(); 
    var curr = (pais == "Brazil" ? "Reais" : "Euro"); 
    var tax = (pais == "Brazil" ? 0 : 3) 
    result = Math.round(quantia * para) + ' ' + curr; 
    $('#result').text(result); 
    e.preventDefault(); 
    return false; 
} 
})(jQuery); 

我可能缺少一個小細節,但我在哪裏我錯了?

回答

1

函數calculate是閉包的局部。最好的解決方案是將所有的代碼放入關閉中。如果這是不可能的,你可以通過功能分配給window

window.calculate = calculate; 

您也可以從封閉返回,然後將其分配給calculate變量:

calculate = (function($) { 
    ... 
    return calculate; 
})(jQuery); 
+0

大,工程。但是,如果我有幾個功能,我是否必須以相似的方式來包裝每一個功能,或者我可以以某種方式一次性包裝所有功能? (函數'calculate'從這裏被調用:'' – johanpw

+0

@johanpw由於您已經在使用jQuery:只需綁定一個適當的事件監聽器。閱讀'jQuery.on' – TimWolla