无法定义功能

时间:2014-05-30 10:57:44

标签: javascript jquery

我正在写类似

的内容
(function($){

  function showAlert(){
    alert('test');
  }

})(jQuery);

当我尝试运行showAlert()时,它表示没有定义showAlert()。

任何人都可以建议为什么?

5 个答案:

答案 0 :(得分:1)

我想你在IEFE功能之外调用了这个功能。

在外面打电话不会起作用,因为它不在全球范围内。 IEFE正在创建一个闭包,其中showAlert成为window

的全局范围的一部分而不是全局范围

这样做:

(function($){
  window.showAlert = function(){
    alert('test');
  }
})(jQuery);

在IEFE中放置一个函数声明是没有意义的,除非它是一个jquery插件。所以,只需删除它:

function showAlert(){
   alert('test');
}  

答案 1 :(得分:1)

javascript中的scope of a variable

  • 全球范围
  • 定义它的功能

showAlert是一个变量。它仅在您编写的外部函数范围内可用。

如果要为外部范围定义函数,请在外部范围中定义它。

答案 2 :(得分:0)

这应该有效!

function showAlert(x) {
   alert(x);
}

showAlert($('#anyElementId').val());

为函数和警报分配变量X.然后将元素val传递给函数调用。

演示:http://jsfiddle.net/94ZtT/

答案 3 :(得分:0)

您在self executing anonymus function内创建了一个功能。 $(document).ready()$(function()...

因此,您的函数位于该函数的本地范围内。简单的意思是你无法在该功能之外访问它。

因此,为了使其可访问,只需将其设为全局。

在JavaScript window中是全局对象。因此,要使您的函数成为全局函数,请按如下方式使用该对象:

$(document).ready(function() {

    function showAlert()() {
        alert('test');
    }

    window.showAlert=showAlert();  //NOTE THIS, IT IS IMPORTANT.

});

现在您可以在JS中的其他位置访问它。

以下是

Fiddle

希望它会帮助你!干杯:)..

答案 4 :(得分:0)

如果你想用你的函数扩展jQuery,只需将函数添加到jQuery对象。 像这样:

(function ($) {
    $.extend({
        showAlert: function () {
           alert('test');
        }
    });
}(jQuery));

将此代码分隔为名为jquery.showAlert.js的文件,在jquery库之后包含它 之后你可以用这种方式使用函数:

$.showAlert()

祝你好运。