我有以下jQuery变量:
var confirmbox=$('<div></div>')
.data({'defaultText': 'This action cannot be reversed. Are you sure you wish to do this?',
'defaultButtons': { Yes : function() { $(this).dialog('close');},
No : function() { $(this).dialog('close');}
}
});
我想将confirmbox.html()
设置为confirmbox.data('defaultText')
。
confirmbox.html(confirmbox.data('defaultText'));//this works
confirmbox.html($(this).data('defaultText'));//this fails. Why?
同样失败的语法现在可以在这里工作:
confirmbox.dialog({
autoOpen: false,
modal: true,
buttons: $(this).data('defaultButtons'),
close: function(){
$(this).html($(this).data('defaultText')); //working here. Why?
$(this).dialog('option','buttons',$(this).data('defaultButtons'));
}
});
我认为我不明白$(this)
在特定情境中所指的是什么。我怎么说?
答案 0 :(得分:2)
就像你说的那样,这完全取决于背景 执行dialog.close()函数时,此对象指向对话框实例,因此$(this)引用jQuery对话框对象。如果您正在执行
confirmbox.html($(this).data('defaultText'));//this fails. Why?
在全球范围内,这并没有那个含义。它指的是document.window对象,而不是你的对话框实例。
答案 1 :(得分:2)
this
是对当前上下文对象的引用。在您失败的示例中,this
可能是指window
对象(或者下一个直接封闭的上下文,如果不是窗口)。例如,如果window
有自己附加的defaultText
数据,那么您将 传递给.html()
。
但由于.html()
旨在将函数作为参数,因此this
将引用confirmbox
上下文。试试这样:
confirmbox.html( function(){
// this now refers to confirmbox
return $(this).data('defaultText');
});
答案 2 :(得分:1)
在confirmbox.dialog
中,this
指的是confirmbox
对象。这就是$(this)
工作的原因。
在confirmbox.html($(this).data('defaultText'));
行中,this
没有上下文,只是设置为window
。
我不太擅长解释事情,但我希望这会有所帮助。