如何在全局设置javascript函数?

时间:2017-04-20 04:56:20

标签: javascript php jquery laravel laravel-5.3

我想在全局js中设置我的函数。所以它可以从任何地方调用

我有这个功能:

$(function () {
    function formatCurrency(input) {
        return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1.");
    }
});

我把这个功能放在

  

C:\ XAMPP \ htdocs中\ mysystem \资源\资产\ JS \ main.js

我在

上添加了这个:<script src="{{URL::asset('/resources/assets/js/main.js')}}"></script>
  

C:\ XAMPP \ htdocs中\ mysystem \资源\视图\布局\ app.blade

执行时,在控制台上存在如下错误:

  

获取http://mysystem.dev/resources/assets/js/main.js 404(未找到)

我该如何解决?

3 个答案:

答案 0 :(得分:2)

您应该将函数定义为窗口对象的方法。

window.formatCurrency = function(input) {
    return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1.");
}

另一种更干净方式将您的函数定义为名为Utils的对象的方法,如下所示:

var Utils = (function(){
    function formatCurrency(input){
        return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1.");
    }
    return {
        formatCurrency: formatCurrency
    }
}());

这样做,您不会污染全局命名空间。您将只在名为Util的全局命名空间中定义一个变量,该变量将包含一个具有有用功能的obejct,可供应用程序的其他部分使用。因为它是你无法看到后一种方法的好处。但是你可以考虑如果你想使用另外3个函数,它们自己使用2个其他函数作为帮助器。如果是这样的话,你的return语句还会包含3个以上的函数,而我之前提到的2个函数根本就不会出现!

答案 1 :(得分:2)

问题似乎是您使用asset()错误。

资产是指/public中的文件。

您应该编译/最小化您的JS用于生产并将其放在/public中的某个位置,即/public/js/my.js

答案 2 :(得分:0)

您可以像这样定义全局函数

window.formatCurrency = function(input){
            return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1.");
        }

你在ready函数中定义函数($(函数))然后你也必须在ready函数中调用它。因此,最好在就绪函数或自调用函数之外定义它。

相关问题