1


0

Javascript:変数を使用して配列を作成する

変数の内容を取得して、そのように配列に固定することは可能ですか(私は役に立たなかった):

最初に、これらの値をデータベースから取得し、phpフォームを使用して非表示の入力を作成します。

{value: '1', name: 'name1'},{value: '2', name: 'name2'}

次に、javascriptで収集します

document.getElementById("myelement").value

次に、値を入れます

var meval = document.getElementById("myelement").value;

そして、私は次のようにデータを構築しようとします:

var data = {items: [meval]};

私がこうすれば

var data = {items: [{value: '1', name: 'name1'},{value: '2', name: 'name2'}]};

それは機能しますが、変数の最初の方法ではありません。 そして、私はそのような元のデータを構築する必要があります。

5 Answer


2


文字列を使用している場合は、eval()を使用できますが、セキュリティとフローの問題が発生するため、少し面倒です。

var meval = "[\ {value: '1'、name: 'name1'}、\ {value: '2'、name: 'name2'}]";

var data = eval(meval);


2


「eval()」は悪です! 代わりに `JSON.parse()`を使用してください。

var data = {items: JSON.parse('['+meval+']')};

WebサイトにjQueryが含まれている場合は、http://api.jquery.com/jQuery.parseJSON/ [$ .parseJSON()]を実行できます。これは古いブラウザーでより適切に機能します。


2


エリックは正しい、あなたは一般的に、任意のJavaScriptリテラルよりもJSONを使用したほうが良いでしょう。 現在、リテラルは二重引用符で囲まれたプロパティ名と文字列値を使用していないため、有効なJSONではありません。 JSON互換のリテラル構文を取得するには、 `json_encode`を使用します。

JSON.parse`が利用できない場合、他の回答のように eval() にフォールバックできますが、追加の角括弧を使用して、先頭の {がオブジェクトリテラルを意味することを eval`が確実に知る必要がありますステートメントではありません。

$row['name'], value=>$row['value']);
?>



    var json= document.getElementById('data').value;
    var data= 'JSON' in window? JSON.parse(json) : eval('('+json+')');

実際、 js`関数の JSON_HEX`オプションを使用すると、HTML属性または ''で同等に有効な方法でリテラルを出力できます


1


その変数を評価して、コンテンツをデータ構造に変換する必要があります。

var data = {items: [eval(meval)]};


0


次の形式でアイテムを非表示入力に入れます。

"name1"."|"."name2"."|"."name3"... and so on

次に、JSで:

var list = document.getElementById("yourelement").value;
var arrayOfStuff = list.split("|");

これで、JS配列は次のようになります。

array() {
    [0] => "Name1"
    [1] => "Name2"
    [2] => "Name3"
    ... and so on
}