我在$('document').ready
内定义了一个函数。
$('document').ready(function() {
function visit(url) {
$.ajax({
url: url,
container: '#maincontainer',
success: function(data) {
init();
}
});
}
function init() {
...
}
)};
但是当我在Chrome控制台中拨打init()
时,我得到:ReferenceError: init is not defined
。
更新:谢谢大家的帮助。我做了window.init = init;
并且效果很好。
答案 0 :(得分:3)
您的init
函数包含在您传递给jQuery.ready
的函数范围内。这是一个好东西,这意味着你没有创建一个不必要的全局。
如果需要将函数导出到全局范围,可以通过显式分配window
上的属性来实现,例如:
window.init = init;
由于window
是浏览器上的global object,因此您可以在Chrome控制台中调用它而不使用window.
前缀。但只有在绝对必要时才这样做,全球范围已经足够拥挤。
答案 1 :(得分:1)
函数声明(如function init() {}
)仅限于它们定义的范围。如果要在其他地方使用init,请执行以下操作:
var init;
$('document').ready(function() {
init = function() {};
});
答案 2 :(得分:0)
尝试这样的事情:
$('document').ready(function() {
var objScope = this;
function visit(url) {
$.pjax({
url: url,
container: '#maincontainer',
success: function(data) {
objScope.init();
}
});
}
function init() {
...
}
)};
答案 3 :(得分:0)
我认为您希望将函数定义放在ready函数之外,即使函数引用文档,也不需要文档准备好定义函数。保持在我的函数中,函数内部的引用在函数实际执行之前不会执行,函数定义就像定义文本常量一样。请改用以下内容:
function visit(url) {
$.pjax({
url: url,
container: '#maincontainer',
success: function(data) {
init();
}
});
}
function init() {
...
}
$(function () {
init();
});
答案 4 :(得分:-1)
函数仅定义您在其中定义的范围。
如果您坚持使用此方法,请改用init = funciton()
语法。这将创建一个全局变量(因为你不会在那里放置var
)可以在任何地方引用。
也就是说,定义函数可以随时完成,将它们放入.ready()
绝对没有意义。