通过HTML调用嵌套JavaScript函数(简单)

通过HTML调用嵌套JavaScript函数(简单),javascript,html,Javascript,Html,我知道这是一个重复的主题,但这个主题是不同的,因为我使用非常简单的例子。我有一个JavaScript函数,如下所示: (function myfunction($){ function a(){ alert("A section"); } function b(){ alert("B section") } })(); 我想创建一个调用函数a和函数B的HTML按钮。如何才能做到这一点?通过在闭包外部声明名称使它们成为全局的,然后

我知道这是一个重复的主题,但这个主题是不同的,因为我使用非常简单的例子。我有一个JavaScript函数,如下所示:

(function myfunction($){
    function a(){
        alert("A section"); 
    }
    function b(){
        alert("B section")
    }
})();

我想创建一个调用函数a和函数B的HTML按钮。如何才能做到这一点?

通过在闭包外部声明名称使它们成为全局的,然后在闭包内分配它们

var a, b;
(function myfunction($){
    a = function() {
        alert("A section"); 
    }
    b = function() {
        alert("B section")
    }
})();
通过将全局命名空间包装到对象中,可以减少全局命名空间的污染:

var myfuns = (function myfunction($) {
                 return { a: function() {alert("A section");},
                          b: function() {alert("B section");}
                        };
              })();

然后调用
myfuns.a
myfuns.b

在闭包外声明名称,使它们成为全局的,然后在闭包内分配它们

var a, b;
(function myfunction($){
    a = function() {
        alert("A section"); 
    }
    b = function() {
        alert("B section")
    }
})();
通过将全局命名空间包装到对象中,可以减少全局命名空间的污染:

var myfuns = (function myfunction($) {
                 return { a: function() {alert("A section");},
                          b: function() {alert("B section");}
                        };
              })();

然后调用
myfuns.a
myfuns.b

您可以创建一个具有这些函数的对象,并调用如下函数:

myFunctions = {

  a : function(){ alert("A section"); },
  b : function(){ alert("B section"); }

}
myFunctions.a();
myFunctions.b();
然后像下面这样称呼他们:

myFunctions = {

  a : function(){ alert("A section"); },
  b : function(){ alert("B section"); }

}
myFunctions.a();
myFunctions.b();
这是检查它的方法

更新:


作为对您评论的回答,这是一个更新版本,向您展示了它是如何从HTML中工作的。

您可以创建一个具有这些函数的对象,并调用您的函数,如下所示:

myFunctions = {

  a : function(){ alert("A section"); },
  b : function(){ alert("B section"); }

}
myFunctions.a();
myFunctions.b();
然后像下面这样称呼他们:

myFunctions = {

  a : function(){ alert("A section"); },
  b : function(){ alert("B section"); }

}
myFunctions.a();
myFunctions.b();
这是检查它的方法

更新:


作为对您评论的回答,这是一个更新版本,向您展示了它是如何从HTML中工作的。

在闭包中为全局变量分配函数是一种方法。另一种方法是如下

(function myfunction($){
    $("#button1").click(function {
        alert("A section"); 
    });
    $("#button2").click(function {
        alert("B section"); 
    });
})(jQuery);
这不会破坏您的全球范围。并绑定按钮的单击事件

不使用jQuery时

(function myfunction($){
    var button1 = getElementById("idOfButton1");
    button1.onclick = function {
        alert("A section"); 
    };
    var button2 = getElementById("idOfButton2");
    button1.onclick = function {
        alert("B section"); 
    };
})();

将函数赋给闭包中的全局变量是一种方法。另一种方法是如下

(function myfunction($){
    $("#button1").click(function {
        alert("A section"); 
    });
    $("#button2").click(function {
        alert("B section"); 
    });
})(jQuery);
这不会破坏您的全球范围。并绑定按钮的单击事件

不使用jQuery时

(function myfunction($){
    var button1 = getElementById("idOfButton1");
    button1.onclick = function {
        alert("A section"); 
    };
    var button2 = getElementById("idOfButton2");
    button1.onclick = function {
        alert("B section"); 
    };
})();

您可以先创建变量,然后将其公开到全局上下文:

(function myfunction($){
    var global = {
        a: function(){
            alert("A section");
        },
        b: function(){
            alert("B section")
        }
    };

    window.global = global;
})();
global.a();
global.b();

您可以先创建变量,然后将其公开到全局上下文:

(function myfunction($){
    var global = {
        a: function(){
            alert("A section");
        },
        b: function(){
            alert("B section")
        }
    };

    window.global = global;
})();
global.a();
global.b();


您无法从闭包外部访问这些函数。您无法从闭包外部访问这些函数。他什么时候说他在使用jQuery?他什么时候说他在使用jQuery?此方法无法调用myFunctions.a();和myFunctions.b();通过HTML按钮。是的,如果在标题中包含javascript,则可以。此方法无法调用myFunctions.a();和myFunctions.b();通过一个HTML按钮。是的,如果你在标题中包含javascript,你可以。如果你也接受你以前问题中的答案,那么其他海报也会很好。我会这样做。顺便说一句,我是新到这个网站的。嗯?你在这里已经一年半了!是的,但我不明白堆栈溢出的可能性。直到现在,我才把stackoverflow当回事。如果你也接受你的老问题的答案,那么其他海报也会很好。我会做的。顺便说一句,我是新到这个网站的。嗯?你在这里已经一年半了!是的,但我不明白堆栈溢出的可能性。直到现在,我才把stackoverflow当回事。@Mathletics如果我误导了什么,你介意告诉我吗?你没有使用任何jQuery,所以我不知道那句话是什么意思。@Mathletics谢谢你告诉我。我不是说我在这里使用jQuery代码。在jQuery中,我们可以找到这样的代码:“window.jQuery=window.$=jQuery;”,因此我在答案中使用了类似的语法。我已经删除了模棱两可的词。@Mathletics如果我误导了什么,你介意告诉我吗?你没有使用任何jQuery,所以我不知道那句话是什么意思。@Mathletics谢谢你告诉我。我不是说我在这里使用jQuery代码。在jQuery中,我们可以找到这样的代码:“window.jQuery=window.$=jQuery;”,因此我在答案中使用了类似的语法。我删除了那些模棱两可的词。