• 締切済み

javascript 要素取得

htmlでチェックボックスを作り、その値をjavascriptで取得したいと思い、 下記のようなプログラムを書きました。 セレクトボックスから複数選択できるようにしたいのですが、 表示されるのは複数選んだ際に一番初めに選択したものだけです。  例) 「あああ」と「いいい」を選ぶと「あああ」のみ表示される。 しかし、これを「あああ.いいい」としたいのです。 できれば、 「あああ  いいい」 と改行できるといいです。 formの中にたくさんの項目があるため、 forのところがうまくいっていないのでしょうか? どなたかよろしくお願いします。 javascript側 function checkbox(){  var str="";  for(i=0;i<document.form1.elements.length;i++){   if(document.form1.elements[i].checked){     if(str != "") str = str + ".";     str = str + document.form1.document[i].value;   }  }  if(str == ""){   alert("入力してください");   return false;  }else{   document.form1.submit();  } } HTML側 <form action="<%=遷移先ページ%>" method="post" name="form1"> <select 複数> <input 複数> <input type="checkbox" name="document" value="・あああ"/>あああ <input type="checkbox" name="document" value="・いいい"/>いいい <input type="checkbox" name="document" value="・ううう"/>ううう <input type="submit" value="Submit" onclick="return checkbox();">

みんなの回答

回答No.4

フォームを送信してサーバーで処理したいのであれば、hiddenフィールドに入れたらどうでしょうか。 JavaScriptよりも、 HTMLの<form>の作り方、動作と、 どういう書き方、ユーザーの動作、選択などをした時にサーバーでどんなデータが受け取れるかというのを、きっちり復習することをお勧めします。 それを逆に考えて サーバーでどんなフォームデータを受け取りたいか ↓ どんなフォームを作れば良いか ↓ そのフォームを作るJavaScriptコードを記述 という流れになります。 nameが同じ物が複数あるときは、それようのJavaScriptの書き方があります。 (サーバーの処理にもそれようの書き方があるはずです。)

回答No.3

どこに(どうやって)表示したいのでしょうか? alert(str); としてみてください。

bsjack
質問者

お礼

補足は編集できないため、こちらに書きます。 javascript内最後のelseで document.form1.document.value = str; return true; としてみましたが、遷移先のページでは表示は変化しませんでした。 javascriptで値を格納しないといけないと思うのですが、 どのようにするか教えていただけますか?

bsjack
質問者

補足

ご回答ありがとうございます。 >alert(str); を書いて「・あああ」と「・いいい」を選択したところ、 「・あああ.・いいい」 が表示されました。 表示先に問題があるようです。 表示先では String strDocument = request.getParameter("document"); で受け取り、 <%=strDocument%> で表示しています。(ここでは「・あああ」のみ表示されます。) 「javascriptでチェックボックスの選択状況をチェックする方法について」 http://oshiete.goo.ne.jp/qa/6105725.html にあるように配列を使うといいのでしょうか?

回答No.2

#1です。もしくは。 で、どうでしょう? name="document" は、みすをさそう? type=='checkbox' をしていないけど。 <!DOCTYPE html> <meta charset="UTF-8"> <title></title> <body> <form action="#" method="post" name="form1" onsubmit="checkbox.call (this, event);"> <input type="checkbox" name="document" value="・あああ"/>あああ <input type="checkbox" name="document" value="・いいい"/>いいい <input type="checkbox" name="document" value="・ううう"/>ううう <input type="submit" value="Submit"> <script> function checkbox (event) {   var form = this;   var d = form.elements['document'];   var ary = [];      for (var i = 0, e; e = d[i++]; )    if (e.checked)    ary.push (e.value);         if (ary.length)     alert (ary.join ('\n'));   else {     alert("入力してください");     return event./*@cc_on @if (1) returnValue = false @else@*/ preventDefault() /*@end@*/;   }   } </script>

bsjack
質問者

お礼

こちらも動きませんでした・・・。 ご回答ありがとうございました。

回答No.1

ぜんかくくうはくは、かんかくにしてください。 querySelectorAll と Array.map がつかえればですけど。 <!DOCTYPE html> <meta charset="UTF-8"> <title></title> <body> <form action="#" method="post" name="form1" onsubmit="checkbox.call (this, event);"> <input type="checkbox" name="document" value="・あああ"/>あああ <input type="checkbox" name="document" value="・いいい"/>いいい <input type="checkbox" name="document" value="・ううう"/>ううう <input type="submit" value="Submit"> <script> // querySelectorAll と Array.map が使えれば。 function checkbox (event) {   var form = this;   var d = form.querySelectorAll ('input[type="checkbox"][name="document"]:checked');   var ary = [];      if (d.length) {     ary = Array.prototype.map.call (d, function (e) { return e.value; });     alert (ary.join ('\n'));   } else {     alert("入力してください");     return event./*@cc_on @if (1) returnValue = false @else@*/ preventDefault() /*@end@*/;   }   } </script>

bsjack
質問者

お礼

早速のご回答ありがとうございました。 >ぜんかくくうはくは、かんかくにしてください。 全角にしていると書き忘れていました。申し訳ありません。 考えていただいたソースコードを試してみましたが、動きませんでしたので、 querySelectorAll と Array.mapが使えないようです。