jQuery noConflict模式

时间:2014-07-09 14:07:38

标签: javascript jquery joomla

我正在尝试在Joomla网站上使用jQuery,而Joomla在noConflict模式下加载jQuery。我正在尝试将代码包装在(function($){ ... })(jQuery);

这有效:

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 个答案:

答案 0 :(得分:1)

函数calculate是闭包的本地函数。最好的解决方案是将所有代码放入闭包中。如果无法做到这一点,您可以通过以下方式将功能分配给window

window.calculate = calculate;

您也可以从闭包中返回它,然后将其分配给calculate变量:

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