プロが教えるわが家の防犯対策術!

jspで、テーブルの中に用意したチェックボックスのvalueを別のプログラム(select_data_c)へ渡したいのですが、うまくいきません。alertを使って確認してみたところ、undefinedが表示されました。
また、受け側のプログラムには特に問題は無いようでした。

以下がソースの一部です。かなりの長文で申し訳ございませんが、ご教授よろしくお願いします。

<%!
//コード
String code_Act_App = "2"; ←アプリ実行の記述です。出力ボタンを押したらcsvを作成
%>
<html>
<head>
<title>データ取得条件選択</title>

<script type="text/javascript">
function entryChange2(){
if(document.getElementById('changeSelect')){
id = document.getElementById('changeSelect').value;

if(id == 'select1'){
//フォーム
document.getElementById('firstBox2').style.display = "";
document.getElementById('firstBox22').style.display = "";
document.getElementById('secondBox2').style.display = "none";
document.getElementById('secondBox22').style.display = "none";

}else if(id == 'select2'){
//フォーム
document.getElementById('firstBox2').style.display = "none";
document.getElementById('firstBox22').style.display = "none";
document.getElementById('secondBox2').style.display = "";
document.getElementById('secondBox22').style.display = "";
}}}
//オンロードさせ、リロード時に選択を保持
window.onload = entryChange2;


function output(){
//変数に代入
var d = document.chkList.chk.value;
alert(d);   ←ここでundefinedが表示されてしまいます
checkvalue = '';
//チェックボックスがONの時はその値を設定する
if (document.chkList.chk.checked == true) {
document.C_FUNC.chk.value = document.chkList.chk.value ;
}}
</script>

</head>
<body>
<div align="center">
<h1>データ取得条件選択</h1>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<th>対象マスター</th>
<td>
<select id="changeSelect" name="hoge" onchange="entryChange2();">
<option value="select1">マスタ選択</option>
<option value="select2">社員マスター</option>
</select>
</td>
</tr>
</table>

<!-- 表示非表示切り替え --> ↓2つのテーブルを横に並べて表示させています

<table><tr><td>
<table id="firstBox2">
<tr>
<th>マスター項目一覧</th>
<td><div style="height:200px; width:300px; border :1px solid #000000; overflow-x:scroll;overflow-y:scroll">
対象マスターを選択し、<br>
表示ボタンを押してください</div></td></tr>
</table>

</td><td valign="top">

<table id="firstBox22">
<tr>
<th>関連テーブル項目一覧</th>
<td valign="top"><div style="height:200px; width:300px; border :1px solid #000000; overflow-x:scroll;overflow-y:scroll">
対象マスターを選択し、<br>
表示ボタンを押してください</div></td></tr>
</table>
</td></tr></table>

<!-- 表示非表示切り替え -->

<table><tr><td>
<table id="secondBox2">
<tr>
<th>マスター項目一覧</th>
<td><form name="chkList" method="POST" >
<div style="height:200px; width:300px; border :1px solid #000000; overflow-x:scroll;overflow-y:scroll">
<input type="checkbox" name="chk" value="会社コード">会社コード<br>
<input type="checkbox" name="chk" value="社員番号">社員番号<br>
<input type="checkbox" name="chk" value="削除フラグ">削除フラグ<br></div></form>
</td></tr></table>

</td><td valign="top">

<table id="secondBox22">
<tr>
<th>関連テーブル項目一覧</th>
<td><form name="chkList" method="POST" >
<div style="height:200px; width:300px; border :1px solid #000000; overflow-x:scroll;overflow-y:scroll">
ここにもマスター項目一覧と同様にチェックボックスを置いています。項目数が多いのでスクロールバーを付けています。
</div></form></td>
</tr>
</table>

</td></tr></table>

<form action = "select_data_c" name="C_FUNC" method="POST">
<input type = hidden name = "chk" value ="d">
<input type = hidden name = "C_FUNC" value = "<%= code_Act_App %>">
<input type="submit" name = "OutPut" value="上記の条件で出力" onClick="output()">
</form>
</div>
</body>
</html>

A 回答 (1件)

あまりきちんと見れていないのですが・・・



>document.chkList.chk
各チェックボックスのnameが同一なので、上記の戻り値はチェックボックスの配列になっています。
ですので、document.chkList.chk[0].value(checked) 等としなければいけません。

また、チェックボックスは3つありますが、C_FUNCフォームには値の設定先が1つしかありません。
そこは大丈夫なのでしょうか。
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまい申し訳ありません、回答ありがとうございます。

> document.chkList.chk[0].value(checked) 等としなければいけません。
配列の形で記述する、という事でしょうか。本を買って調べてみて、以下の様に書き換えてみました
function output(){
var result = [] ;
//変数に代入
var d = document.chkList.chk;
for(var i = 0; i < d.length; i++){
if(d[i].checked){
result.push(d[i].value);
}}
alert(result.toString());  ←チェックを付けた項目が表示されていました
return false;
}

> C_FUNCフォームには値の設定先が1つしかありません
チェックが複数付く場合、値の設定先も複数持たせるのでしょうか?scriptを書き換えた際に受け側のプログラムも配列で取得するようにしました。
String[] chkbox = request.getParameterValues("chk");

csvを出力させると、
<input type = hidden name = "chk" value ="d">
のvalueに書いた"d"が送られていました。

何がいけないんだろう・・・完全に知識不足ですね
JavaScriptとサーブレットの本を購入したので、よく調べてみます。回答して頂き、本当にありがとうございました!

お礼日時:2011/08/22 13:17

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

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