0

私は次の機能を持っています:

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ミリ秒後、特定のバッジが更新されていない場合、そのバッジはbadge-unknownクラスを獲得します。

上記の関数は次のように呼び出されます。

$(function () { updateStatuses(); });

私の問題はvalue.removeClass('badge-known');、次のエラーが発生することです。

TypeError: value.removeClass is not a function

その行をコメントアウトすると、タイムアウト関数は同じエラーをスローしますvalue.removeClass('badge-unknown');

紛らわしいのは、上記の関数のすぐ下に定義されている、でaddClass使用removeClassされていることです。setStatus私はここで何が間違っているのですか?

4

2 に答える 2

4

.each標準の jQuery メソッドを呼び出すときに使用する必要はありません。そのようなメソッドのほとんどは、一連の要素を直接反復処理します。

document.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);
于 2012-07-25T19:24:09.933 に答える
3

valuejQuery オブジェクトではなく、dom ノードです。試す

$(value).removeClass('badge-known');
于 2012-07-25T19:23:58.627 に答える