Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在函数中引用此_Javascript_Jquery_Methods_This - Fatal编程技术网

Javascript 在函数中引用此

Javascript 在函数中引用此,javascript,jquery,methods,this,Javascript,Jquery,Methods,This,给出了代码(很多代码都被删除了) 当I警报($(this).currentSelectedBar)时它总是显示为未定义,未正确设置值。你知道为什么会这样吗 这个想法是当你点击一个条时,它会淡出,当你点击另一个条时,最后一个淡出的条也会淡入。回调函数中的这个指的是引发事件的元素:在这种情况下,$('#'+barID)。 我猜您想访问扩展的此。在这种情况下,您应该这样写: this.addBar = function(startDate, endDate, label, styleID) {

给出了代码(很多代码都被删除了)

当I
警报($(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
不同)