javascript - jquery 的 click() 中 this.variable = NaN

标签 javascript jquery

html:

<div id="mydiv">lol</div>

JavaScript:

var oWM = new WM();
oWM.Add("mydiv");
oWM.Initialize();

function WM() {
    this.ZIndex = 1000;
    this.Windows = [];
    this.Add = function(id) {
        this.Windows.push(id);
    }
    this.Initialize = function() {
        for (var i = 0; i < this.Windows.length; i++) {
            $("#" + this.Windows[i]).click(function () {
                alert("#"+this.id + ":" + this.ZIndex++);
                $("#" + this.id).css("z-index", this.ZIndex++);
            });
        }
    }
}

当用户单击 div 时,我会得到 this.ZIndex 的“Nan”,因此我的“change-zindex-on-click”功能不起作用。为什么它没有得到认可,我怎样才能让它发挥作用?

我认为这与 jquery 的 $() 函数有关,因为 this.Windows[i] 在该 block 内也未定义。

http://jsfiddle.net/79sM8/

点击“lol”div 看看会发生什么

提前致谢

最佳答案

因为在您的单击事件内部,this 是您单击的元素,而不是 WM 对象。

最简单的修复方法是提前绑定(bind)点击函数的this值:

$("#" + this.Windows[i]).click(function () {
    alert("#"+this.id + ":" + this.ZIndex++);
    $("#" + this.id).css("z-index", this.ZIndex++);
}.bind(this);
<小时/>

编辑 - 结果你想读取被单击元素的 id 属性,因此上面的方法在这种情况下可能不起作用,因为你仍然需要 this.id 来引用 dom 元素的 id。

肯定要学会如何使用function.bind,但是对于这个问题,下面的解决方案就是你想要的

<小时/>

当然,这在 IE8 中不起作用(没有填充程序),所以如果这是一个问题,您可以提前保存 WM 对象的 this 值并使用 that 在点击处理程序中:

this.Initialize = function() {
    var self = this;
    for (var i = 0; i < this.Windows.length; i++) {
        $("#" + this.Windows[i]).click(function () {
            alert("#"+ this.id + ":" + self.ZIndex++);
            $("#" + this.id).css("z-index", self.ZIndex++);
        });
    }
}

关于javascript - jquery 的 click() 中 this.variable = NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14800056/

相关文章:

javascript - 你可以使用 Node 检查器来调试与工头一起运行的 node.js 应用程序吗

javascript - 通过 ajax 加载内容时,光滑 slider 不会实例化

javascript - 如何使用 Javascript 更改 API 响应

javascript - 图像 src 未写入弹出窗口主体?

javascript - 正则表达式不允许前导空格,但允许其他任何地方,并且要求至少一个大写字母和一个小写字母

javascript - RabbitMQ。循环发布消息

javascript - jQuery表格排序和货币发行

javascript - 对话框点击jquery获取html跨度值

javascript - 将图标添加到 js.erb.html 中的 link_to?

javascript - 重新应用 jquery 函数