gooID利用規約 改定のお知らせ

下記のように入力すると、チェックボックスがundefinedと表示されてしまいます。
どのように変更すればよいのでしょうか?
教えてください

<script type="text/javascript">
<!--
function CheckForm(){
//****************送信内容の取得****************
var data = new Array();
var namesArray = new Array(
'Name', 'Sex', 'Age', 'Address'
, 'Tel', 'Email');
var f = document.forms[0];
for (var i in namesArray){
var n = namesArray[i];
if (n == 'Sex'){
data[n] = '';
for (var j = 0; j < f[n].length; j++){
if (f[n][j].checked){
data[n] = f[n][j].value;
break;
}
}
}
else{
data[n] = f[n].value;
}
}
//****************名前のチェック****************
if (data.Name.length == 0){
alert('名前が入力されていません。');
f.Name.focus();
return false;
}
//***********確認ダイアログによる確認***********
return confirm('下記の内容で送信して'
+ 'よろしいですか?\n\n'
+ '選んでください:\t\t' + data.Course1 + '\n' + data.Course2 + '\n' + data.Course3 + '\n'
+ '名前:\t\t' + data.Name + '\n'
+ '性別:\t\t' + data.Sex + '\n'
+ '年齢:\t\t' + data.Age + '\n'
+ '住所:\t\t' + data.Address + '\n'
+ '電話番号:\t' + data.Tel + '\n'
+ 'E-Mailアドレス:\t' + data.Email);
}
//-->
</script>
<form action="/kantan-cgi/formmail.pl?id=*********"
method="post" onSubmit="return CheckForm();">
<dl>
<dt><span class="mainBp">【選んでください】</span></dt>
<dd><input type="checkbox" name="Course1" value="コース1" />コース1
<input type="checkbox" name="Course2" value="コース2" />コース2
<input type="checkbox" name="Course3" value="コース3" />コース3</dd>
<dt>名前(必須)</dt>
<dd><input type="text" name="Name" /></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="Sex" value="男性" />男
<input type="radio" name="Sex" value="女性" />女
</dd>
<dt>年齢</dt>
<dd><input type="text" name="Age" size="2" /></dd>
<dt>住所</dt>
<dd><input type="text" name="Address" size="70" /></dd>
<dt>電話番号</dt>
<dd><input type="text" name="Tel" /></dd>
<dt>E-Mailアドレス</dt>
<dd><input type="text" name="Email" size="50" /></dd>
</dl>
<input type="submit" value="送信" />
</form>

このQ&Aに関連する最新のQ&A

A 回答 (5件)

ああ、セレクトですね・・・


その場合はチェック項目を一つ増やします

<script>
function CheckForm(f){
var namesArray = new Array(
{"key":'Name',"err":"名前が入力されていません。"}
, {"key":'Sex',"err":"性別が選択されていません。"}
, {"key":'Age',"err":"年齢が入力されていません。"}
, {"key":'Address',"err":"住所が入力されていません。"}
, {"key":'Tel',"err":"電話番号が入力されていません。"}
, {"key":'Email',"err":"メールアドレスが入力されていません。"}
, {"key":'Visited',"err":"利用履歴が選択されていません。"}
);
for (var i in namesArray){
var k = namesArray[i]["key"];
var e = f.elements[k];
if(e.type=="text" && e.value==""){
alert(namesArray[i]["err"]);
return false;
}
if(e.type=="select-one" && e.value==""){
alert(namesArray[i]["err"]);
return false;
}
if((typeof e[0])!="undefined" && e[0].type=="radio"){
var flg=true;
for(var j=0;j<e.length;j++){
if(e[j].checked){
flg=false;
break;
}
}
if(flg){
alert(namesArray[i]["err"]);
return false;
}
}
}
var msg="";
msg+='選んでください:\n' ;
msg+=f.elements["Course1"].checked?'\t\t'+f.elements["Course1"].value+ '\n':"";
msg+=f.elements["Course2"].checked?'\t\t'+f.elements["Course2"].value+ '\n':"";
msg+=f.elements["Course3"].checked?'\t\t'+f.elements["Course3"].value+ '\n':"";
msg+='名前:\t\t' + f.elements["Name"].value + '\n';
msg+='性別:\t\t' + (f.elements["Sex"][0].checked?f.elements["Sex"][0].value:f.elements["Sex"][1].value )+ '\n';
msg+='年齢:\t\t' + f.elements["Age"].value + '\n';
msg+='住所:\t\t' + f.elements["Address"].value + '\n';
msg+='電話番号:\t' + f.elements["Tel"].value + '\n';
msg+='E-Mailアドレス:\t' + f.elements["Email"].value + '\n';
msg+='履歴:\t\t' + f.elements["Visited"].value + '\n';
return confirm('下記の内容で送信してよろしいですか?\n\n'+msg);
}
</script>
<form onSubmit="return CheckForm(this);">
<dl>
<dt><span class="mainBp">【選んでください】</span></dt>
<dd><input type="checkbox" name="Course1" value="コース1" />コース1
<input type="checkbox" name="Course2" value="コース2" />コース2
<input type="checkbox" name="Course3" value="コース3" />コース3</dd>
<dt>名前(必須)</dt>
<dd><input type="text" name="Name" /></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="Sex" value="男性" />男
<input type="radio" name="Sex" value="女性" />女
</dd>
<dt>年齢</dt>
<dd><input type="text" name="Age" size="2" /></dd>
<dt>住所</dt>
<dd><input type="text" name="Address" size="70" /></dd>
<dt>電話番号</dt>
<dd><input type="text" name="Tel" /></dd>
<dt>E-Mailアドレス</dt>
<dd><input type="text" name="Email" size="50" /></dd>
<dt>利用履歴(必須)</dt>
<dd><select name="Visited">
<option value=""> -- 選択して下さい -- </option>
<option value="利用したことがない">利用したことがない</option>
<option value="以前、利用したことがある">以前、利用したことがある</option>
</select></dd>
</dl>
<input type="submit" value="送信" />
</form>
    • good
    • 0
この回答へのお礼

ありがとうございました。
感謝感謝です

お礼日時:2011/07/26 07:51

>のなかにメニューフォームを入れたのですが、反応しません



ごめんなさい、意味がわからない。
メニューフォームとは何のことで、それをどのように実装したいのでしょうか?
具体的に提示していただけると回答できるかも
    • good
    • 0
この回答へのお礼

下記の利用履歴の
<dt>利用履歴(必須)</dt>
<dd><select name="Visited">
<option value=""> -- 選択して下さい -- </option>
<option value="利用したことがない">利用したことがない</option>
<option value="以前、利用したことがある">以前、利用したことがある</option>
</select></dd>
だと

{"key":'Visited',"err":"利用履歴が選択されていません。"}
が反応しないのです。何度もすみさせんお願いします。

----------------------------------------------------------------------

<script>
function CheckForm(f){
var namesArray = new Array(
{"key":'Visited',"err":"利用履歴が選択されていません。"}
, {"key":'Name',"err":"名前が入力されていません。"}
, {"key":'Sex',"err":"性別が選択されていません。"}
, {"key":'Age',"err":"年齢が入力されていません。"}
, {"key":'Address',"err":"住所が入力されていません。"}
, {"key":'Tel',"err":"電話番号が入力されていません。"}
, {"key":'Email',"err":"メールアドレスが入力されていません。"}
);
for (var i in namesArray){
var k = namesArray[i]["key"];
var e = f.elements[k];
if(e.type=="text" && e.value==""){
alert(namesArray[i]["err"]);
return false;
}
if((typeof e[0])!="undefined" && e[0].type=="radio"){
var flg=true;
for(var j=0;j<e.length;j++){
if(e[j].checked){
flg=false;
break;
}
}
if(flg){
alert(namesArray[i]["err"]);
return false;
}
}
}
var msg="";
msg+='選んでください:\n' ;
msg+=f.elements["Course1"].checked?'\t\t'+f.elements["Course1"].value+ '\n':"";
msg+=f.elements["Course2"].checked?'\t\t'+f.elements["Course2"].value+ '\n':"";
msg+=f.elements["Course3"].checked?'\t\t'+f.elements["Course3"].value+ '\n':"";
msg+='利用履歴:\t\t' + f.elements["Visited"].value + '\n';
msg+='名前:\t\t' + f.elements["Name"].value + '\n';
msg+='性別:\t\t' + (f.elements["Sex"][0].checked?f.elements["Sex"][0].value:f.elements["Sex"][1].value )+ '\n';
msg+='年齢:\t\t' + f.elements["Age"].value + '\n';
msg+='住所:\t\t' + f.elements["Address"].value + '\n';
msg+='電話番号:\t' + f.elements["Tel"].value + '\n';
msg+='E-Mailアドレス:\t' + f.elements["Email"].value;
return confirm('下記の内容で送信してよろしいですか?\n\n'+msg);
}
</script>
<form onSubmit="return CheckForm(this);">
<dl>
<dt><span class="mainBp">【選んでください】</span></dt>
<dd><input type="checkbox" name="Course1" value="コース1" />コース1
<input type="checkbox" name="Course2" value="コース2" />コース2
<input type="checkbox" name="Course3" value="コース3" />コース3</dd>
<dt>利用履歴(必須)</dt>
<dd><select name="Visited">
<option value=""> -- 選択して下さい -- </option>
<option value="利用したことがない">利用したことがない</option>
<option value="以前、利用したことがある">以前、利用したことがある</option>
</select></dd>
<dt>名前(必須)</dt>
<dd><input type="text" name="Name" /></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="Sex" value="男性" />男
<input type="radio" name="Sex" value="女性" />女
</dd>
<dt>年齢</dt>
<dd><input type="text" name="Age" size="2" /></dd>
<dt>住所</dt>
<dd><input type="text" name="Address" size="70" /></dd>
<dt>電話番号</dt>
<dd><input type="text" name="Tel" /></dd>
<dt>E-Mailアドレス</dt>
<dd><input type="text" name="Email" size="50" /></dd>
</dl>
<input type="submit" value="送信" />
</form>

お礼日時:2011/07/25 18:52

今回のケースだとこんな感じでしょうか?


かなり元ソースが汚いので、よく推敲して理解を深めた方がよいでしょう
あと、コースについては「少なくともどれか一つは選ばなくてはいけない」など
特殊なバリデートが必要な気がしますが・・・

<script>
function CheckForm(f){
var namesArray = new Array(
{"key":'Name',"err":"名前が入力されていません。"}
, {"key":'Sex',"err":"性別が選択されていません。"}
, {"key":'Age',"err":"年齢が入力されていません。"}
, {"key":'Address',"err":"住所が入力されていません。"}
, {"key":'Tel',"err":"電話番号が入力されていません。"}
, {"key":'Email',"err":"メールアドレスが入力されていません。"}
);
for (var i in namesArray){
var k = namesArray[i]["key"];
var e = f.elements[k];
if(e.type=="text" && e.value==""){
alert(namesArray[i]["err"]);
return false;
}
if((typeof e[0])!="undefined" && e[0].type=="radio"){
var flg=true;
for(var j=0;j<e.length;j++){
if(e[j].checked){
flg=false;
break;
}
}
if(flg){
alert(namesArray[i]["err"]);
return false;
}
}
}
var msg="";
msg+='選んでください:\n' ;
msg+=f.elements["Course1"].checked?'\t\t'+f.elements["Course1"].value+ '\n':"";
msg+=f.elements["Course2"].checked?'\t\t'+f.elements["Course2"].value+ '\n':"";
msg+=f.elements["Course3"].checked?'\t\t'+f.elements["Course3"].value+ '\n':"";
msg+='名前:\t\t' + f.elements["Name"].value + '\n';
msg+='性別:\t\t' + (f.elements["Sex"][0].checked?f.elements["Sex"][0].value:f.elements["Sex"][1].value )+ '\n';
msg+='年齢:\t\t' + f.elements["Age"].value + '\n';
msg+='住所:\t\t' + f.elements["Address"].value + '\n';
msg+='電話番号:\t' + f.elements["Tel"].value + '\n';
msg+='E-Mailアドレス:\t' + f.elements["Email"].value;
return confirm('下記の内容で送信してよろしいですか?\n\n'+msg);
}
</script>
<form onSubmit="return CheckForm(this);">
<dl>
<dt><span class="mainBp">【選んでください】</span></dt>
<dd><input type="checkbox" name="Course1" value="コース1" />コース1
<input type="checkbox" name="Course2" value="コース2" />コース2
<input type="checkbox" name="Course3" value="コース3" />コース3</dd>
<dt>名前(必須)</dt>
<dd><input type="text" name="Name" /></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="Sex" value="男性" />男
<input type="radio" name="Sex" value="女性" />女
</dd>
<dt>年齢</dt>
<dd><input type="text" name="Age" size="2" /></dd>
<dt>住所</dt>
<dd><input type="text" name="Address" size="70" /></dd>
<dt>電話番号</dt>
<dd><input type="text" name="Tel" /></dd>
<dt>E-Mailアドレス</dt>
<dd><input type="text" name="Email" size="50" /></dd>
</dl>
<input type="submit" value="送信" />
</form>
    • good
    • 0
この回答へのお礼

何度もすみません
上記の
var namesArray = new Array(
{"key":'Name',"err":"名前が入力されていません。"}
, {"key":'Sex',"err":"性別が選択されていません。"}
, {"key":'Age',"err":"年齢が入力されていません。"}
, {"key":'Address',"err":"住所が入力されていません。"}
, {"key":'Tel',"err":"電話番号が入力されていません。"}
, {"key":'Email',"err":"メールアドレスが入力されていません。"}
);
のなかにメニューフォームを入れたのですが、反応しません
どうしてでしょうか?

お礼日時:2011/07/25 18:28

#1 です。



必須項目を加えるのなら「名前」と同じ要領でやれないでしょうか?
汎用性重視なら http://www.tagindex.com/kakolog/q4bbs/2201/2595. … が参考になるかも。
    • good
    • 0
この回答へのお礼

サイトを確認したのですが素人なので...
ちょっと理解できませんでした
すみません

よろしければ、いちどサイトを見てもらえないでしょうか?
http://www.david-men.com/webmail.html

お礼日時:2011/07/25 16:06

チェックボックスの処理が全く入ってないじゃないですか…。


http://jsfiddle.net/C5xSP/1/
    • good
    • 0
この回答へのお礼

ありがとうございました。

問題解決しました。
ただ、あまりに使っていたjavascriptの記述と違いすぎて、こんどは必須の追加ができなくなてしまいました。どのように追加すればよいでしょうか?

お礼日時:2011/07/24 22:23

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qチェックボックスの値を取り出したい

こんにちは JavaScript初心者です。
過去ログを見ながらここまでやったのですが、何も表示されません。
?マークの所で引っかかっていると思うのですがどなたかご教授願います。
やりたい事は、チェックボックスのチェックの入った所の値を取り出して表示したいのですが...
3つチェックされていてOKをクリックした時に、ABC と出てくるのが理想です。
<html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function chkform() {
for(i=1; i<=3; i++) {

chkdata(i) = document.form0.chk(i).Value    ?
var aa = chkdata(i)

document.write(aa)
}
}
//--></SCRIPT>

<FORM onSubmit="return chkform(this)" name = "form0">

<INPUT type="checkbox" name="chk" value="A" >
<INPUT type="checkbox" name="chk" value="B" >
<INPUT type="checkbox" name="chk" value="C" >

<INPUT type="submit" value="OK" >
</form>

</html>

こんにちは JavaScript初心者です。
過去ログを見ながらここまでやったのですが、何も表示されません。
?マークの所で引っかかっていると思うのですがどなたかご教授願います。
やりたい事は、チェックボックスのチェックの入った所の値を取り出して表示したいのですが...
3つチェックされていてOKをクリックした時に、ABC と出てくるのが理想です。
<html>
<SCRIPT LANGUAGE="JavaScript">
<!--
function chkform() {
for(i=1; i<=3; i++) {

chkdata(i) = document.form0.chk(i).Value   ...続きを読む

Aベストアンサー

これでは全然ダメです。
もう少し本なり見て勉強しましょう。

function chkform() {

var chkdata = new Array();
var aa = "";
var len = document.form0.chk.length;

for(i=0; i<len; i++) {
if ( document.form0.chk[i].checked ) {
chkdata[i] = document.form0.chk[i].value;
aa += chkdata[i];
}
}
document.write(aa);
}

やるなら、こんな感じで良いのでは?
#私的にはこんなのでも嫌ですが。。。

各行で何をやってるか理解した上でご使用ください。m(__)m

Qjavascriptでセレクトボックスの"selected"を動的につ

javascriptでセレクトボックスの"selected"を動的につける方法について質問させてください。

現在、以下のようなフォームを作成しました。

<select name='year'>
<option value='2010'>2010</option>
<option value='2011'>2011</option>
</select>年

<select name='month'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
<option value='6'>6</option>
<option value='7'>7</option>
<option value='8'>8</option>
<option value='9'>9</option>
<option value='10'>10</option>
<option value='11'>11</option>
<option value='12'>12</option>
</select>月

<select name='day'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
<option value='6'>6</option>
<option value='7'>7</option>
<option value='8'>8</option>
<option value='9'>9</option>
<option value='10'>10</option>
<option value='11'>11</option>
<option value='12'>12</option>
<option value='13'>13</option>
<option value='14'>14</option>
<option value='15'>15</option>
<option value='16'>16</option>
<option value='17'>17</option>
<option value='18'>18</option>
<option value='19'>19</option>
<option value='20'>20</option>
<option value='21'>21</option>
<option value='22'>22</option>
<option value='23'>23</option>
<option value='24'>24</option>
<option value='25'>25</option>
<option value='26'>26</option>
<option value='27'>27</option>
<option value='28'>28</option>
<option value='29'>29</option>
<option value='30'>30</option>
<option value='31'>31</option>
</select>日


このセレクトボックスに、例えば今日の日付"2010年9月30日"だったら、それぞれの年、月、日の<option>に"selected"をつけたいのですが、javascriptではどのようにして実現したら良いのでしょうか?

よろしくお願いします。

javascriptでセレクトボックスの"selected"を動的につける方法について質問させてください。

現在、以下のようなフォームを作成しました。

<select name='year'>
<option value='2010'>2010</option>
<option value='2011'>2011</option>
</select>年

<select name='month'>
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
<option value='4'>4</option>
<option value='5'>5</option>
<option value='6'>6</option>
<option value='7'>7</option>
<option value='8...続きを読む

Aベストアンサー

こんな感じで・・・

<script>
window.onload=function(){
var f=document.getElementById("f0");
var ymd=new Date();
checkSelect(f.elements["year"],ymd.getFullYear());
checkSelect(f.elements["month"],ymd.getMonth() +1);
checkSelect(f.elements["day"],ymd.getDate());
}
function checkSelect(obj,val){
for(var i=0;i<obj.length;i++){
if(obj[i].value==val){
obj[i].selected=true;
break;
}
}
}
</script>
<form id="f0">
<div>
<select name='year'>
<option value='2009'>2009</option>
<option value='2010'>2010</option>
<option value='2011'>2011</option>
</select>年

<select name='month'>
<option value='8'>8</option>
<option value='9'>9</option>
<option value='10'>10</option>
</select>月

<select name='day'>
<option value='29'>29</option>
<option value='30'>30</option>
<option value='31'>31</option>
</select>日
</div>
</form>

こんな感じで・・・

<script>
window.onload=function(){
var f=document.getElementById("f0");
var ymd=new Date();
checkSelect(f.elements["year"],ymd.getFullYear());
checkSelect(f.elements["month"],ymd.getMonth() +1);
checkSelect(f.elements["day"],ymd.getDate());
}
function checkSelect(obj,val){
for(var i=0;i<obj.length;i++){
if(obj[i].value==val){
obj[i].selected=true;
break;
}
}
}
</script>
<form id="f0">
<div>
<select name='year'>
<opt...続きを読む

Qcheckboxをクリックしてリロードした際、クリックしたcheckboxのvalueの値を保持したい。

checkboxをクリックした後、リロードをしてクリックされたcheckboxのvalueの値を表示したいと思っております。
ただ、下記のソースでは動作しませんでした。
リロード時のvalueの値の引渡し方法に問題があるのだろうと思いますが、どう記述すればよいか分かりませんでした。
その為、どのような記述を行えばよいかアドバイスをいただければと思います。

【ソース】
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript">
function load() {
window.alert(value);
}
</script>
<title>title</title>
</head>

<body onload="load();">
<p>valueは1<input type="checkbox" name="checkbox1" value="1" onclick="location.reload()" onkeypress="location.reload()" /></p>
<p>valueは2<input type="checkbox" name="checkbox2" value="2" onclick="location.reload()" onkeypress="location.reload()" /></p>
<p>valueは3<input type="checkbox" name="checkbox3" value="3" onclick="location.reload()" onkeypress="location.reload()" /></p>
</body>
</html>

以上、よろしくお願いします。

checkboxをクリックした後、リロードをしてクリックされたcheckboxのvalueの値を表示したいと思っております。
ただ、下記のソースでは動作しませんでした。
リロード時のvalueの値の引渡し方法に問題があるのだろうと思いますが、どう記述すればよいか分かりませんでした。
その為、どのような記述を行えばよいかアドバイスをいただければと思います。

【ソース】
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/x...続きを読む

Aベストアンサー

ちょっと手を抜いているけど、こんな感じでいけるのでは?

<script>
window.onload=load;
function load() {
var f=document.getElementById("f0");
var v="";
var s=location.search.substr(1).split("&")
for(var i=0;i<f.length;i++){
if(f[i].type=="checkbox"){
f[i].onclick=function(){ this.form.submit(); }
f[i].onkeypress=function(){ this.form.submit(); }
for(var j in s){
if(s[j]==f[i].name+"="+f[i].value) f[i].checked=true;
}
if(f[i].checked) v+=(v==""?"":",")+f[i].value;
}
}
alert(v)
}
</script>

<form id="f0">
<p>valueは1<input type="checkbox" name="checkbox1" value="1" /></p>
<p>valueは2<input type="checkbox" name="checkbox2" value="2" /></p>
<p>valueは3<input type="checkbox" name="checkbox3" value="3" /></p>
</form>

ちょっと手を抜いているけど、こんな感じでいけるのでは?

<script>
window.onload=load;
function load() {
var f=document.getElementById("f0");
var v="";
var s=location.search.substr(1).split("&")
for(var i=0;i<f.length;i++){
if(f[i].type=="checkbox"){
f[i].onclick=function(){ this.form.submit(); }
f[i].onkeypress=function(){ this.form.submit(); }
for(var j in s){
if(s[j]==f[i].name+"="+f[i].value) f[i].checked=true;
}
...続きを読む

QHTMLファイル同士での値渡し

困っています。

HTMLファイルからHTMLファイルへ移動するときに、
HTMLファイル1でJavaScript で算出された値を
HTMLファイル2へ渡して使用したいのです。

showModalDialogだとダイアログにしか渡せないし・・・。
このように、値をそのまま次のページに渡すための方法を教えてください。
お願いします。

Aベストアンサー

すみません。うっかりしてました。

document.write(FORM[v1]);
では、v1を変数と認識してしまうので、エラーになってしまいますね。

document.write(FORM.v1);  // 「FORM.v1」です
あるいは
document.write(FORM["v1"]);
としてください。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。

Qチェックボックスから複数のvalueを取り出す

HTMLフォームから、action="file.php"でデータの受け渡し→PHPで送られてきたvalueに応じて文章を出力、というプログラムを作っています。

例:
グループAのラジオボタン1にチェック、送信
→グループAで押されたラジオボタンを送信されたvalueで判別、この場合はvalue==A
→value==Aの場合に表示する文章を変数に受け渡し、その変数で表示

ラジオボタン、テキストボックスのvalueは$_POST['XXX']で取り出せたのですが、チェックボックスのデータだけが取り出せません。こちらの質問を検索したとき、多次元配列という言葉を見かけたのですが、いまいちよく分かりませんでした。
チェックボックスの複数のvalueで、上記の例のような動きを実現させるにはどうしたらいいでしょうか。どなたかご教授ください。

Aベストアンサー

チェックボックスはちょっと特殊

まずHTML部分で、以下のように定義します
<input type="checkbox" name="sample[]" value="test1">test1
<input type="checkbox" name="sample[]" value="test2">test2

ここでは、nameの部分に[]をつけるのがポイント


次にphpで受け取る方法として、
$sample = $_POST["sample"];
で問題ありません。

受け取ったデータを使うときは、$sampleは配列になっていますので、
仮に上記のtest1とtest2両方にチェックが付いているとしたら、
$sample[0]にはtest1が、$sample[1]にはtest2が入っています。

$sampleをforeachで使うか、$sampleのデータ数を調べてforでループさせるなどで使えます。

Qページ間で変数を保持したい

いつもお世話になっております。

今回はhtml間での値渡しについてお聞きしたいです。

現在ある二つのページA,Bを作成していまして、お互いにリンクが張ってあります。
AからBに行く時、Aの中にあるフォームの内容をBに表示したく外部jsファイルでグローバル変数に保持したりなどやってみましたがだめでした。

そもそもこのようなことをjavascriptのみでできるのでしょうか?
また可能ならばどのようにすればよいでしょうか?
ご教授お願いします。

Aベストアンサー

<form action="fB.html" method="get">
とした場合の例ですが、

以下のコードを参考にしてみてください。
------------------------------------------------------------
fA.html
------------------------------------------------------------
<html>
<head>
</head>
<body>
<form action="fB.html" method="get">
<input type="text" name="t" value="textA"></input>
<input type="hidden" name="h" value="hiddenA">
<input type="submit">
</form>
</body>
</html>
------------------------------------------------------------
fB.html
------------------------------------------------------------
<html>
<head>
<script type="text/javascript">
<!--
function init() {
var arr=Array();

var ss = "";
var querys=location.search;
if(querys) {
var q = querys.replace(/^\?/,'').split('&');
for(i=0 ; i<q.length ; i++){
var pair=q[i].split('=');
// arr[pair[0]]=pair[1];
ss += pair[0] + " = " + pair[1] + "\n";
}
}
alert(ss);
}

window.onload= init;

//--></script>
</head>
<body>
</body>
</html>

<form action="fB.html" method="get">
とした場合の例ですが、

以下のコードを参考にしてみてください。
------------------------------------------------------------
fA.html
------------------------------------------------------------
<html>
<head>
</head>
<body>
<form action="fB.html" method="get">
<input type="text" name="t" value="textA"></input>
<input type="hidden" name="h" value="hiddenA">
<input type="submit">
</form>
</b...続きを読む

Q外部読み込みで動かないときの対処法

プログラミングの入口にも立っていない初心者です。

あるプログラムを導入することになりました。
htmlに直接記述した場合はjsが動いていることが確認ができるのですが、外部読み込みにした場合、なぜか動きません。
記述方法がまちがっているのでしょうか?
サイト運営の手間を考えて、絶対外部読み込みにする必要があります。


《動く…jsをhtmlに直接記述》
<head>
<!-- 文字コードなどの記述は省いています -->
<meta http-equiv="Content-Script-Type" content="text/javascript" />
</head>

<body>
<!-- その他のhtml記述は省略 -->
<script type="text/javascript">
<!--
document.write(unescape("%3Cscript src='" + document.location.protocol +
'//www.sample.com/js?pcid=PC-123456-A' + "' type='text/javascript'%3E%3C/script%3E"));
// -->
</script>
<script type="text/javascript">
<!--
(function() {
var pc = new predicta.PClick();
pc.start();
})();
// -->
</body>



《動かない…js外部読み込みの記述》
<head>
<!-- 文字コードなどの記述は省いています -->
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script type="text/javascript" src="http://www.sample.net/hoge/js/sample.js"></script>
</head>

------------------------------------------------------
js/sample.jsの記述
------------------------------------------------------
document.write(unescape("%3Cscript src='" + document.location.protocol +
'//www.sample.com/js?pcid=PC-123456-A' + "' type='text/javascript'%3E%3C/script%3E"));

(function() {
var pc = new predicta.PClick();
pc.start();
})();


ちなみに、その他にも外部読み込みし、動いているJavaScriptはあります。

ご教示のほど、どうぞよろしくお願いいたします。

プログラミングの入口にも立っていない初心者です。

あるプログラムを導入することになりました。
htmlに直接記述した場合はjsが動いていることが確認ができるのですが、外部読み込みにした場合、なぜか動きません。
記述方法がまちがっているのでしょうか?
サイト運営の手間を考えて、絶対外部読み込みにする必要があります。


《動く…jsをhtmlに直接記述》
<head>
<!-- 文字コードなどの記述は省いています -->
<meta http-equiv="Content-Script-Type" content="text/javascript" />
</head>

<body>
<!...続きを読む

Aベストアンサー

>『protocolを指定してますが、http:で統一…』のくだり

ようは、自分自身のファイルがhttpプロトコルをつかっていれば
http://www.exsample.com/jsを呼びますが、
自分がhttps:だったりするとhttps://www.exsample.com/jsを
読みに行っちゃうということです。
もう少し突っ込めばローカルのファイルを処理すると
file://www.exsample.com/jsになってしまい、テストするにもブレがでてきます。

//hoge.htm
<html>
<head>
<script type="text/javascript" src="hoge.js"></script>
</head>
<body>
test
</body>

//hoge.js
window.onload=function(){
var s=document.createElement('script');
s.setAttribute('src','http://www.exsample.com/js?pcid=PC-123456-A');
s.setAttribute('type','text/javascript');
document.getElementsByTagName("head")[0].appendChild(s);
var pc = new predicta.PClick();
pc.start();
}

みたいな感じですかねぇ・・・

>『protocolを指定してますが、http:で統一…』のくだり

ようは、自分自身のファイルがhttpプロトコルをつかっていれば
http://www.exsample.com/jsを呼びますが、
自分がhttps:だったりするとhttps://www.exsample.com/jsを
読みに行っちゃうということです。
もう少し突っ込めばローカルのファイルを処理すると
file://www.exsample.com/jsになってしまい、テストするにもブレがでてきます。

//hoge.htm
<html>
<head>
<script type="text/javascript" src="hoge.js"></script>
</head>
<body>
test
</body>

...続きを読む

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。


人気Q&Aランキング

おすすめ情報