[英]Why cannot access to variable inside function that assigned jquery object
我無法訪問函數內的button
或container
變量。 有什么問題?
var Site = {
init: function () {
$(".site .head .nav-bar .nav-button").click(function () {
Site.Navigation.toggle();
return false;
});
},
Navigation: {
container: $(".site .head .nav-bar .navigation"),
button: $(".site .head .nav-bar .nav-button"),
toggle: function () {
if (this.button.hasClass("active")) {
this.hide();
}
else {
this.show();
}
},
show: function () {
this.button.addClass("active");
this.container.slideDown();
return false;
},
hide: function () {
this.button.removeClass("active");
this.container.slideUp();
return false;
}
//another stuff
}
}
$(document).ready(function () {
Site.init();
});
我不是很確定,但我相信正在發生的事情是你的選擇器不匹配任何元素,因為它們是在元素添加到DOM之前調用的。 我是說這些:
container: $(".site .head .nav-bar .navigation"),
button: $(".site .head .nav-bar .nav-button"),
嘗試將整個JavaScript移動到正文的末尾(就在</body>
之前)。
另一種可能的解決方案是僅從Site.init
填充這些屬性(當前,在聲明對象文字時立即填充它們:
var Site = {
init: function () {
this.Navigation.container = $(".site .head .nav-bar .navigation");
this.Navigation.button = $(".site .head .nav-bar .nav-button");
$(".site .head .nav-bar .nav-button").click(function () {
Site.Navigation.toggle();
return false;
});
},
Navigation: {
container: null,
button: null,
toggle: function () {
if (this.button.hasClass("active")) {
this.hide();
}
else {
this.show();
}
},
show: function () {
this.button.addClass("active");
this.container.slideDown();
return false;
},
hide: function () {
this.button.removeClass("active");
this.container.slideUp();
return false;
}
//another stuff
}
}
這是因為當你的對象被定義時,你的元素可能還不存在,因為在DOM准備好之后代碼沒有運行。
您可以修改Site.init
函數以接受這些元素引用作為參數。
init: function (container, button) {
var nav = this.Navigation;
nav.container = container;
nav.button = button;
}
然后傳遞元素:
$(document).ready(function () {
Site.init(/*containerEl*/, /*buttonEl*/);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.