0

取得しているチェックボックスの値が変数か配列かを正確に確認するにはどうすればよいですか。フォルダーに存在するディレクトリの数に基づいて、フォームにチェックボックスを動的に入力する PHP スクリプトがあります。複数のディレクトリがある限り、次のコードを使用できます

for (i=0;i<document.getElementById('editarticle').currentcategories.length;i++)
{
    if      
(document.getElementById('editarticle').currentcategories[i].checked==true)
    {

    currentcheckedcategories[currentcheckedcategoriescounter] =  
document.getElementById('editarticle').currentcategories[i].value;

    currentcheckedcategoriescounter++



    }
    else
    {
    currentnotcheckedcategories[currentnotcheckedcategoriescounter] =    
document.getElementById('editarticle').currentcategories[i].value;
    currentnotcheckedcategoriescounter++
    }

}

ただし、current-categories が配列でない場合、つまりカテゴリが 1 つしかない場合は、undefined が返され、カテゴリ値が収集されません。for ループを実行する前に currentcategories が配列であるかどうかを確認して、この問題を回避する唯一の方法はありますか? もしそうなら、現在のカテゴリが配列であるかどうかを確認するにはどうすればよいですか。別のフォーラムで、Array のインスタンスを使用できることを読みましたが、それは機能していないようで、別の Web サイトでは、iFrame を使用していると失敗するため、フェイル セーフではないと述べています。currentcategories が配列であるかどうかを確認する方法、または私の問題の代替コードを提供する方法を誰かが明らかにしてくれることを願っています。前もって感謝します。

PS。JQuery やその他のフレームワークではなく、コードを JavaScript にする必要があります。

部分的に解決

さて、ここまで同じ名前のチェックボックスが複数存在するかどうかをif文で確認してきました。

if(document.getElementById('editarticle').currentcategories.length == undefined)

未定義は、その名前のチェックボックスが 1 つしか使用できないことを意味します。それ以外の場合は、選択できる複数の currentcategories チェックボックスがあります。IE 8 Firefox および Chrome で動作するようです。それが最良の方法であるとは確信していません。おそらく、誰かがこの実装の欠陥やより良い解決策を見つけたら、私に知らせてください。

Edorcas コードを試してみましたが、そのコードは currentcategories の値に基づいて配列に対して true を返します。したがって、currentcategories という名前の 3 つのチェックボックスがあり、1 つだけが選択されている場合、コードは配列に対して false を返します。もちろん、この質問のタイトルを「チェックボックスの値が配列であるかどうかを確認する方法」と表現したので、これはおそらく私のせいです。私の質問をよりよく反映するように変更しました。

4

1 に答える 1

0

オブジェクトに属性の長さが定義されている場合、それは配列である必要があります。配列が空の場合、if (result.length) が false になるため、比較に注意してください。ただし、この関数ははるかに便利です。この回答にあるようにCheck if object is array?

window.isArray = function(candidate){
    if (candidate == null)
        return false;
    return ( Object.prototype.toString.call(candidate) === '[object Array]' )
}
于 2013-09-24T11:17:55.220 に答える