Javascript 为什么jQuery会出现此函数作用域错误?
我有以下功能:Javascript 为什么jQuery会出现此函数作用域错误?,javascript,jquery,scope,Javascript,Jquery,Scope,我有以下功能: function updateStatuses() { $.each($('.status-badge'), function (i, value) { value.removeClass('badge-known'); }); $.post("/Diagnostics/Update", { }, function(data) { $.each(data, function() { setStatu
function updateStatuses() {
$.each($('.status-badge'), function (i, value) {
value.removeClass('badge-known');
});
$.post("/Diagnostics/Update", { }, function(data) {
$.each(data, function() {
setStatus(this.Id, this.Infos, this.Errors, this.Warnings);
});
});
window.setTimeout(function () {
$.each($('.status-badge:not(.badge-known)'), function(i, value) {
value.addClass('badge-unknown');
});
}, 1000);
}
基本上,我正在更新一组来自AJAX调用的徽章。如果1000毫秒后,任何特定的徽章尚未更新,它将获得徽章未知
类
上述函数被称为:
$(function () { updateStatuses(); });
我的问题是value.removeClass('badge-known')代码>给出以下错误:
TypeError: value.removeClass is not a function
如果我注释该行,timeout函数会在value.removeClass('badge-unknown')上抛出相同的错误代码>
令人困惑的是,addClass
和removeClass
在setStatus
中使用,这是在上述函数下面定义的。我做错了什么?value
是dom节点,而不是jQuery对象。试一试
$(value).removeClass('badge-known');
调用标准jQuery方法时,不需要使用。每个。大多数这样的方法都可以直接迭代一组元素
此外,在主文档周围不需要匿名函数包装。ready
处理程序:
您的整个代码可以如下所示:
function updateStatuses() {
$('.status-badge').removeClass('badge-known');
$.post("/Diagnostics/Update", { }, function(data) {
$.each(data, function() {
setStatus(this.Id, this.Infos, this.Errors, this.Warnings);
});
});
window.setTimeout(function () {
$('.status-badge:not(.badge-known)').addClass('badge-unknown');
}, 1000);
}
$(updateStatuses);
然而,阿尔尼塔克的答案有一个更好的选择。其中两个$。each()
不需要(抛出错误的两个)。@apsillers不需要任何。each()
调用removeClass
和addClass
块。我接受Kevin的答案,因为他发现了我的实际问题,但是+1,因为这比我以前尝试的要优雅得多@DanRasmussen实际上是在一个.each()
循环中,你最好使用$(这个)
而不是$(值)
,但没关系;-)我也试过了(this.removeClass
),只是出于绝望尝试了value
。。哈哈