我只是使用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);
});
}
}
答案 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;
}