プロが教える店舗&オフィスのセキュリティ対策術

select要素のvalueを配列で取得したく、下記のサンプルを動かそうと試みました。

<html>
<head></head>
<body>
<form>
<!-- ここに<select name="c1">~<select name="c20">の20個のselectがあるとする -->
</form>
<input type="button" value="はい" onclick="test(this.form)">

<script type="text/javascript">
function test ( form ) {
var values = new Array();
for ( var i=0; i < 20; i ++ ) {
var elm = form.elements['c'+i];
values[i] = elm.options[elm.selectedIndex].value;
}
}
</script>
</body>
</html>


このようなサンプルを動かそうとしたのですが、
var elm = form.elements['c'+i];のところの['c'+i]が正しくないようで
「elm is underfind」というエラーが出てしまいます

<script>
function myForm (form) {
var values = new Array();
for ( var i=0; i<20; i++ ) {
var elm = form.elements[i];
values[i] = elm.options[elm.selectedIndex].value;
document.write(values[i] + "<br />");
}
}
</script>
インデックス名を'c'+iからiにすると取得できるのですが、
ブラウザが読み込みをやめない状態になってしまいます。
select要素のnameはc1から始まりc20と何も換えていません。
何が間違っているのでしょうか。

A 回答 (3件)

具体的にはこんなかんじ



<script>
function test(f) {
var values = new Array();
for ( var i=0; i < 3; i ++ ) {
var elm =f.elements['c'+(i+1)];
values[i] = elm.options[elm.selectedIndex].value;
}
alert(values);
}
</script>
<form>
<select name="c1">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="c2">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="c3">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="button" value="はい" onclick="test(this.form)">
</form>

この回答への補足

すみません、訂正です。
forの中に移動してalert(values[i]);とdocument.write(values[i]);でした。

補足日時:2011/12/16 15:51
    • good
    • 0
この回答へのお礼

最後のalert(values);ですが、alert(values[i]);でも大丈夫ですが、
document.write(values[i]);にするとその症状がでてしまうようです。
不思議ですね。有難うございました。

お礼日時:2011/12/16 15:48

document.writeはページの書き換えなのでこの場合は使ってはいけません。


てっとりばやくやるなら任意の場所のIDを指定してinnerHTMLを
書き変えてやることです。

<script>
function test(f) {
var values = new Array();
document.getElementById("hoge").innerHTML="";
for ( var i=0; i < 3; i ++ ) {
var elm =f.elements['c'+(i+1)];
values[i] = elm.options[elm.selectedIndex].value;
document.getElementById("hoge").innerHTML+=values[i]+" ";
}
}
</script>
<form>
<select name="c1">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="c2">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<select name="c3">
<option value=""></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="button" value="はい" onclick="test(this.form)">
</form>
<div id="hoge"></div>
    • good
    • 0
この回答へのお礼

そうだったのですか。有難うございます。
参考サイト
http://d.hatena.ne.jp/atomer/20110108/1294502064

お礼日時:2011/12/16 20:00

いくつか問題があります。



(1)formの外にボタンがある
></form>
><input type="button" value="はい" onclick="test(this.form)">

これは逆
<input type="button" value="はい" onclick="test(this.form)">
</form>

(2)セレクトの始まる番号とiがあっていない
>for ( var i=0; i < 20; i ++ ) {
iが0から始まっているなら

>var elm = form.elements['c'+i];
var elm = form.elements['c'+(i+1)];
にしておかないと・・・
    • good
    • 0
この回答へのお礼

有難うございます。ご指摘のように全て直したのですが、
解決できませんでした。動作完了後ブラウザが読み込み中になってしまいます。

お礼日時:2011/12/16 13:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A