• ベストアンサー

JavaScriptが参照する要素名が配列の場合は?

下記に示すようなリンクをクリックすると入力欄に入力されるjavascriptを作っているのですが、inputのname属性が配列になっているとうまく参照してくれません。 フォームの生成や送信内容の処理が配列だと都合がよく、なんとかできないかと悩んでいます。html側の要素名を変えずにjavascriptに参照させる方法はないでしょうか。 うまくいく場合の抜粋 function f1(VALUE){ if(!document.MyForm.str1.value){ document.MyForm.str1.value = VALUE; } } <input name="str1" type="text" /> <a href="javascript:f1('単語');">単語</a> うまくいかない場合の抜粋 function f2(VALUE){ if(!document.MyForm.str[1].value){ document.MyForm.str[1].value = VALUE; } } <input name="str[1]" type="text" /> <a href="javascript:f2('単語');">単語</a>

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.5

#3です。#4さんの回答見ました。 勘違いしてたかもしれません。失礼しました。 こんな書き方でも通りますね。 if(!document.MyForm['str[1]'].value){ document.MyForm['str[1]'].value = VALUE; }

tuyopon07
質問者

お礼

おかげさまでご回答いただいた方法で上手くいきました。 MyForm(formのname属性)の中の配列の要素として扱うことも出来るのですね。 どうもありがとうございました。

その他の回答 (4)

  • shogo0809
  • ベストアンサー率47% (25/53)
回答No.4

蛇足かもしれませんが。 おそらく、サーバーサイドがPHPで PHP側で受け取った際に配列となるようにしたいんだと思いますが、 この認識で合ってますでしょうか? だとしたら#2さんの回答が正解で、 #3さんの回答は「JavaScript上で同名の要素を配列として扱いたい場合」 の解です。 ちなみに別の解決手法としてこんなのもあります。 <input name="str[1]" type="text" /> ↓ <input id="str1" name="str[1]" type="text" /> function f2(VALUE){ var obj = document.getElementById('str1'); if (!obj.value) { obj.value = VALUE; } } お好きな方をどうぞ。

tuyopon07
質問者

お礼

ご回答のようにidを使えばなんとかできるのではとはじめ考えていたのですが、 今回の環境がご推察のとおりPHPで処理するためなのですが、 フォームのHTML部分に関してもPHPのライブラリを使って自動生成したため、 idを使う場合だと生成前に書き換える必要があり、 もう少しスマートな方法がないかと思いお尋ねしました。 ご回答は別の機会で役立てられそうです。 どうもありがとうございました。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

<input name="str[1]" type="text" /> ↑ここが悪い name="str[1]" としても配列にはならないですよ。  <input name="str" type="text" /> <input name="str" type="text" /> <input name="str" type="text" /> 配列にしたいなら、同じ名前で定義すれば、配列になります。 例: <html><head> <script type="text/javascript"><!-- function f2(VALUE){ for(i = 0; i < 3; i++){ if(!document.MyForm.str[i].value){ document.MyForm.str[i].value = VALUE; } } } --></script> </head><body> <form name="MyForm"> <input name="str" type="text" /> <input name="str" type="text" /> <input name="str" type="text" /> </form> <a href="javascript:f2('単語');">単語</a></script> </body></html>

tuyopon07
質問者

お礼

今回はHTMLがPHPのライブラリで自動生成されたものが name="str[1]"のようになっており、これを強制的に変換するよりも できればjavascript側で解決したかったため、お尋ねしました。 状況の説明不足で申し訳ありませんでした。 ただ、この解決方法は気づきませんでした。 今後htmlから記述するときには利用したいと思います。 ありがとうございました。

  • ANASTASIAK
  • ベストアンサー率19% (658/3306)
回答No.2

こうすればいいんです。配列は関係ありません。 function f2(VALUE){ if(!document.forms['MyForm'].elements['str[1]'].value){ document.forms['MyForm'].elements['str[1]'].value = VALUE; } }

tuyopon07
質問者

お礼

ご回答の方法で無事動作しました。 直接オブジェクト名を指定しない方法があったんですね。 この書き方の方が確実ですね。ありがとうございました。

noname#39970
noname#39970
回答No.1

配列は1じゃなく0から開始される ってのは判ってるよね?

tuyopon07
質問者

補足

ご回答ありがとうございます。 サーバー側の処理の便宜以上配列を1から取っていました。 0に変えても試してみましたがうまくいきませんでした。

関連するQ&A