2017-04-20 88 views
0

我想在全局js中设置我的功能。因此,它可以从任何地方如何在全球设置javascript功能?

叫我有作用的:

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

我把功能上

C:\xampp\htdocs\mysystem\resources\assets\js\main.js

我补充一点:在

C:\xampp\htdocs\mysystem\resources\views\layouts\app.blade

<script src="{{URL::asset('/resources/assets/js/main.js')}}"></script>执行时,在控制台上存在这样的错误:

GET http://mysystem.dev/resources/assets/js/main.js 404 (Not Found)

我该如何解决?

+0

404只能由几个原因造成的。错字,丢失和不正确的配置。 – Darkrum

+0

@达克鲁姆,你可以提供更详细的答案 –

回答

2

这个问题似乎是你使用asset()错误。

资产是指/public中的文件。

你应该编译/最小化你的JS进行生产,并把它在某处/public,即/public/js/my.js

+0

我已经做到了。但现在错误:'未捕获的ReferenceError:formatCurrency未定义' –

0

您可以定义全局函数这样

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

,你定义准备功能($(功能))功能,那么你必须准备功能也呼吁这一点。所以最好在ready函数或自调函数外面定义它。

+0

为什么投票表决? –

+0

不是我。我尝试。但存在错误:'GET http://mysystem.dev/resources/assets/js/main.js 404(Not Found)' –

+0

但这不是脚本错误。这意味着路径是错误的。你提到的道路没有错。交叉检查文件的路径,并检查您的网址是否正确。我的意思是main.js文件不包含在你的页面中。 而请不要尝试投票答案是不可接受的。 –

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的变量,它将包含一个可以被应用程序的其他部分使用的有用函数的对象。因为它是你不能看到后一种方法的好处。但是你可以考虑如果你想使用3个更多的功能,那么他们自己使用2个其他功能作为助手。如果是这样的话,你的回归声明也会包含3个函数,而我之前提到的2个函数根本就不会出现!

+0

你可以请分享一个例子声明多个功能或任何教程链接。我一直在寻找这个。 –

+0

@Christos,我尝试过。但存在错误:'GET http://mysystem.dev/resources/assets/js/main.js 404(Not Found)' –

+1

@DavinderKumar这就是所谓的模块模式。你可以从这个链接https://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript开始。 – Christos