人。我有这样的事情:
myThing = {
str:"my string",
setClick: function(){
$("button").click(function(){
alert(this.str);
});
}
}
myThing.setClick();
问题是当我点击按钮时,该功能不知道str是什么。 alert(str)
给了我一个错误(str is not defined
)并且没有提醒。 alert(this.str)
为我提供了警告但包含undefined
。
我可以看到this
引用了该按钮,该按钮没有任何名为str
的属性。那么如何访问jQuery函数中的str呢?
答案 0 :(得分:5)
在this
事件处理程序之外的setClick
中保存对click
的引用:
myThing = {
str:"my string",
setClick: function() {
var self = this;
$("button").click(function() {
alert(self.str);
});
}
}
<强> DEMO 强>
答案 1 :(得分:3)
您始终可以按名称
引用对象myThing = {
str:"my string",
setClick: function(){
$("button").click(function(){
alert(myThing.str);
});
}
}
myThing.setClick();
答案 2 :(得分:0)
您可以使用javascript函数bind
强制执行函数的上下文。我发现它在这种情况下很有用。它允许您在被绑定的函数中定义this
的值。
myThing = {
str:"my string",
setClick: function(){
$("button").click(function(e){
// 'this' is myThing
// $(e.currentTarget) is the button on which the event handler was attached
}.bind(this));
}
}
myThing.setClick();