如何通过HTML调用函数内部函数

时间:2015-12-25 08:25:30

标签: javascript html function call

我只是使用HTML无法访问函数内部的函数。 如何仅使用HTML 调用setLayout(),或者只能在Javascript中调用?

<button onclick="customize.setLayout('b.html');">Click Please</button>

使用Javascript:

 function customize() {
     function setLayout(text) {

        var selectedLayout = text;
        layout += selectedLayout;
        $.get(layout, function (data) {
            $("#layout-grid").html(data);
        });
    }
}

5 个答案:

答案 0 :(得分:6)

根本无法拨打setLayout

其他函数中定义的函数作用于该函数。它们只能由该范围内的其他代码调用。

如果您希望能够拨打customize.setLayout,那么您必须先创建customize(可以是一个功能,但不需要),然后您需要{ {1}}该对象的属性。

setLayout

答案 1 :(得分:4)

在函数中调用函数的多种方法。首先,内部功能对外部是不可见的,直到你明确地暴露它为止只有一种方式:

function outerobj() {

    this.innerfunc = function () { alert("hello world"); }

}

这定义了一个对象,但目前没有实例。您需要先创建一个:

var o = new outerobj();
o.innerfunc();

另一种方法:

var outerobj = {

    innerfunc : function () { alert("hello world"); }

};

这将定义一个可以立即使用的对象outerobj

outerobj.innerfunc();

答案 2 :(得分:2)

  

简单回答:您无法在任何地方使用此设置呼叫setLayout()

原因是setLayout()customize()之外不会显示,甚至不会从其他JavaScript代码中看到,因为它是在customize()内部定义的,因此它具有本地范围仅在customize()内可用。像其他人提到的还有其他方法......(^ __ ^)

您可以返回setLayout()的回复,将其作为customize()的方法返回,并在HTML customize().setLayout('b.html');中使用,例如<{1}}。

<button onclick="customize().setLayout('b.html');">Click Please</button>

<强> JavaScript的:

function customize() {

    var setLayout = function (text) {
        var selectedLayout = text;
        layout += selectedLayout;
        $.get(layout, function (data) {
            $("#layout-grid").html(data);
        });
    };

    return {
        setLayout: setLayout
    };

}

另一种方法

您还可以将主要功能customize定义为Immediately-Invoked Function Expression (IIFE)。这样,您可以在HTML部分中调用其方法时省略括号。

<button onclick="customize.setLayout('b.html');">Click Please</button>

<强>的JavaScript

var customize = (function () {

    var setLayout = function (text) {
        var selectedLayout = text;
        layout += selectedLayout;
        $.get(layout, function (data) {
            $("#layout-grid").html(data);
        });
    };

    return {
        setLayout: setLayout
    };

})();

答案 3 :(得分:2)

如果你坚持这样做,可以定义setLayout然后调用它, 像这样的东西:

<script>
  function customize(text, CallSetLayout) {
    if (CallSetLayout) {
      (function setLayout(text) {
        //do something
        alert(text);
      })(text);
    }
  }

</script>
<button onclick="customize('sometext',true);">Click Please</button>

然后您可以决定是否要从外部定义和调用setLayout

答案 4 :(得分:1)

您需要将其视为对象和方法

<button onclick="customize().setLayout('b.html');">Click Please</button>

抱歉,我必须编辑此代码以获得更多说明

function customize() {

     this.setLayout = function setLayout(text) {

        var selectedLayout = text;
        layout += selectedLayout;
        $.get(layout, function (data) {
            $("#layout-grid").html(data);
        });
    }
    return this;
}