Javascript 在函数中引用此
给出了代码(很多代码都被删除了) 当IJavascript 在函数中引用此,javascript,jquery,methods,this,Javascript,Jquery,Methods,This,给出了代码(很多代码都被删除了) 当I警报($(this).currentSelectedBar)时它总是显示为未定义,未正确设置值。你知道为什么会这样吗 这个想法是当你点击一个条时,它会淡出,当你点击另一个条时,最后一个淡出的条也会淡入。回调函数中的这个指的是引发事件的元素:在这种情况下,$('#'+barID)。 我猜您想访问扩展的此。在这种情况下,您应该这样写: this.addBar = function(startDate, endDate, label, styleID) {
警报($(this).currentSelectedBar)时代码>它总是显示为未定义,未正确设置值。你知道为什么会这样吗
这个想法是当你点击一个条时,它会淡出,当你点击另一个条时,最后一个淡出的条也会淡入。回调函数中的这个指的是引发事件的元素:在这种情况下,$('#'+barID)
。
我猜您想访问扩展的此
。在这种情况下,您应该这样写:
this.addBar = function(startDate, endDate, label, styleID) {
var self = this
// When the bar is clicked
$('#' + barID).click(function() {
alert($(self).currentSelectedBar);
if (self.currentSelectedBar != undefined)
$('#' + self.currentSelectedBar).fadeIn("slow");
self.currentSelectedBar = barID;
$(this).fadeTo("slow", 0.5);
});
}
回调函数中的this
引用引发事件的元素:在这种情况下$('#'+barID)
。
我猜您想访问扩展的此
。在这种情况下,您应该这样写:
this.addBar = function(startDate, endDate, label, styleID) {
var self = this
// When the bar is clicked
$('#' + barID).click(function() {
alert($(self).currentSelectedBar);
if (self.currentSelectedBar != undefined)
$('#' + self.currentSelectedBar).fadeIn("slow");
self.currentSelectedBar = barID;
$(this).fadeTo("slow", 0.5);
});
}
假设您正在对DataArea
的实例调用addBar
,您的代码应该是:
// Add a bar to this object
this.addBar = function(startDate, endDate, label, styleID) {
var self = this;
// When the bar is clicked
$('#' + barID).click(function() {
alert(self.currentSelectedBar);
if (self.currentSelectedBar != undefined)
$('#' + self.currentSelectedBar).fadeIn("slow");
self.currentSelectedBar = this.id;
$(this).fadeTo("slow", 0.5);
});
}
在单击处理程序中,此将引用DOM元素“#”+barID
。但是属性被分配给其他元素,而不是该DOM元素。假设您正在对数据区的实例调用addBar
,您的代码应该是:
// Add a bar to this object
this.addBar = function(startDate, endDate, label, styleID) {
var self = this;
// When the bar is clicked
$('#' + barID).click(function() {
alert(self.currentSelectedBar);
if (self.currentSelectedBar != undefined)
$('#' + self.currentSelectedBar).fadeIn("slow");
self.currentSelectedBar = this.id;
$(this).fadeTo("slow", 0.5);
});
}
var that = this;
$('#' + barID).click(function() {
alert(that.currentSelectedBar);
if (that.currentSelectedBar != undefined)
$('#' + this.currentSelectedBar).fadeIn("slow");
that.currentSelectedBar = barID;
$('#' + barID).fadeTo("slow", 0.5);
});
在单击处理程序中,此将引用DOM元素“#”+barID
。但是属性被分配给其他元素,而不是DOM元素
var that = this;
$('#' + barID).click(function() {
alert(that.currentSelectedBar);
if (that.currentSelectedBar != undefined)
$('#' + this.currentSelectedBar).fadeIn("slow");
that.currentSelectedBar = barID;
$('#' + barID).fadeTo("slow", 0.5);
});
将此
的值缓存在单击功能之外。在click函数中,上下文this
是被单击的DOM节点
将此
的值缓存在单击功能之外。在click函数中,上下文这个是被单击的DOM节点。看起来jQuery的行为有问题
$(“#”+barID)。单击(function(){
重新映射此
的定义,但先前尝试向其添加属性将无效,因为此
的定义已被覆盖
正如recmashak所提到的,您可以将原始的this
放入一个变量中,然后在执行警报时使用它。看起来您对jQuery的行为有问题
$(“#”+barID)。单击(function(){
重新映射此
的定义,但先前尝试向其添加属性将无效,因为此
的定义已被覆盖
正如recmashak所提到的,您可以将原始的this
放入一个变量中,然后在执行警报时使用它我认为您不仅仅存在这一个问题。正如@Robert在其对我的评论中正确指出的(现已删除)回答,this
指的是您将事件处理程序绑定到的DOM元素。我认为您不仅仅存在这一个问题。正如@Robert在其对my(现已删除)的评论中正确指出的那样回答,this
指的是您将事件处理程序绑定到的DOM元素。jQuery与此无关。这是基本的Javascript范围规则。我不认为我所说的一定是错的。jQuery开发人员有意识地决定在事件处理程序内部重新映射this
。Prototype不会这样做(改为调用event.element()
)。如果没有重新映射this
,它将引用this.addBar
对象,这是JavaScript作用域规则(仍然与扩展的原始this
不同)jQuery与此无关。这是基本的Javascript作用域规则。我不认为我所说的一定是错的。jQuery开发人员有意识地决定在事件处理程序内部重新映射此
。Prototype不会这样做(改为调用event.element()
)。如果没有重新映射this
,它将引用this.addBar
对象,这是JavaScript作用域规则(仍然与扩展的原始this
不同)