1

for ループと json オブジェクトを使用してドロップダウンを設定すると、最後に未定義のオプションがドロップダウンに追加されます。

 for (var i in PriceRanges[purpose]) {
        var r = PriceRanges[purpose][i];
        html += '<option value="' + r.id + '">' + r.text + '</option>';
}

PriceRanges は私の json オブジェクトです。事前に助けてくれてありがとう。

4

4 に答える 4

0

安全のために、ループ内のキーのプロパティ所有者を常に確認する必要があります。for in

for (var i in PriceRanges[purpose])
{
    if (PriceRanges[purpose].hasOwnProperty(i))
    {
        html += '<option value="' + PriceRanges[purpose][i].id + '">'
                + PriceRanges[purpose][i].text + '</option>';
    }
}

forしかし、これは配列を繰り返し処理しているようにfor in見えiますfor in

for (var i=0;i<PriceRanges[purpose].length;i++)
{
    html += '<option value="' + PriceRanges[purpose][i].id + '">'
            + PriceRanges[purpose][i].text + '</option>';
}

もちろん、非常に安全にするには、両方のループに if を追加する必要があります。

if (PriceRanges[purpose][i].id && PriceRanges[purpose][i].text)

存在しないプロパティの使用を避けるため (そのため、未定義が返されます)

于 2012-09-21T08:22:28.057 に答える
0

jQueryの各関数を使用してコレクションを制御できると思います

var html = "";

$.each(PriceRanges.sale, function() {

        html += '<option value="' + this.id + '">' + this.text + '</option>';
});
于 2012-09-21T10:20:40.370 に答える
0

このようにunfiedをチェックして追加するよりも

for (var i in PriceRanges[purpose])
 {
         var r = PriceRanges[purpose][i];
         if (typeof r != "undefined") 
         {
            if (typeof r.id != "undefined"
                  && typeof r.text != "undefined")
            html += '<option value="' + r.id + '">' + r.text + '</option>';
         }
 }
于 2012-09-21T07:40:35.093 に答える
0

これは、var html を定義していないためです。これは undefined .. と等しくなります。したがって、それを文字列に追加すると、 undefined はまだ連結された文字列内にあります ..

だからこれを試してください

var html = '';
for (var i in PriceRanges[purpose]) {
        var r = PriceRanges[purpose][i];
        html += '<option value="' + r.id + '">' + r.text + '</option>';
}

これで問題が解決するはずです....

于 2012-09-21T08:06:56.413 に答える