0

大幅に変更されたバージョンのjquery-tokeninputを使用しています

これは基本的に、スタックオーバーフローのように複数のタグを許可するテキスト入力ボックスです。

これを実行することにより、現在入力にあるすべてのタグで戻り値を取得できます。

$("#no-custom-tokens").tokenInput("get")

問題は、次のように返されることです。

ここに画像の説明を入力してください

私がそれを呼び出そうとすると$("#no-custom-tokens").tokenInput("get").length、それはただ未定義と言います。

このオブジェクト内にu1、u2などがあるかどうかを確認する必要があります(基本的に..は入力ブランクです)。

私はやることを考えました...

if ($("#no-custom-tokens").tokenInput("get").u1.name != "")

トークンを削除してからさらに2つ追加する場合を除いて、u1、u2では開始されません...u3とu4で開始されます。

:/

4

3 に答える 3

1

空かどうかを確認します。

function isEmpty(obj) {
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) return false;
    }
    return true;
}

その長さを確認してください:

function objectLength(obj) {
    var size = 0;
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) ++size;
    }
    return size;
}

// or:

function objectLength(obj) {
    return Object.keys(obj).length;
}
于 2012-07-12T23:17:49.637 に答える
1

「このオブジェクト内にu1、u2などがあるかどうかを確認する必要があります(基本的には入力ブランクです)。」

基本的に少なくとも1つのプロパティの存在を確認する必要があり、プロパティが列挙可能である場合は、これを行うことができます...

var has_props = false,
    obj = $("#no-custom-tokens").tokenInput("get");

for (var p in obj) {
    has_props = true;
    break;
}

console.log(has_props);

いくつあるか知りたい場合、また、それらが列挙可能である場合は、Object.keys...を使用できます。

var props_len = Object.keys($("#no-custom-tokens").tokenInput("get")).length;

古いブラウザをサポートしている場合は、シムする必要があります...

if (!Object.keys)
    Object.keys = function(o) {
        var keys = [];
        for (var k in o)
            if (o.hasOwnProperty(k))
                keys.push(k);

        return keys;
    };
于 2012-07-12T23:10:56.647 に答える
1

配列ではなくオブジェクトとして返されるように見えるため、.lengthメソッドはありません。オブジェクトに何かが含まれているかどうかを確認したいだけの場合は、オブジェクトをループして、何かが見つかった場合はフラグを設定してみてください。それで:

var isEmpty = true;
var tokens = $("#no-custom-tokens").tokenInput("get");
for (var i in tokens) {
    isEmpty = false;
    break;
}
if (isEmpty) {
    ...
}
于 2012-07-12T23:11:23.307 に答える