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

How to call function inside function through only HTML

我无法仅使用 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);
        });
    }
}

根本无法调用 setLayout

在其他函数中定义的函数仅限于该函数。它们只能被该范围内的其他代码调用。

如果你想能够调用 customize.setLayout 那么你必须首先创建 customize (它可以是一个函数,但不需要是)然后你需要制作 setLayout 该对象的 属性。

customize.setLayout = function setLayout(text) { /* yada yada */ };

在函数内调用函数的多种方式。首先,内部函数在您明确公开之前对外部不可见只有一种方法是:

function outerobj() {

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

}

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

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

另一种方法:

var outerobj = {

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

};

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

outerobj.innerfunc();

Simple answer: You can't call setLayout() with this setup anywhere!

原因是,setLayout()customize() 之外不可见,甚至在其他 JavaScript 代码中也不可见,因为它是在 customize() 内部本地定义的,所以它具有本地范围仅在 customize() 内可用。就像其他人提到的,还有其他可能的方法...(^__^)

您可以通过 return 将其作为 customize() 的方法 return setLayout() 的响应,并在您的 HTML 中使用它,例如 customize().setLayout('b.html'); 例如

<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
    };

}

另一种方法

您还可以定义您的主函数,即 customizeImmediately-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
    };

})();

如果你非要这样做的话,可以定义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

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

<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;
}