宜しくお願いします。
フォームの入力チェックで、「ある項目(ラジオボタン)を選択した場合、次のテキストボックスを入力不可にする」という動きをjavascriptでさせています。
しかし、フォームのリセットボタンをクリックした際に、選択したラジオボタンはクリアできるのですが、テキストボックスの状態をクリアすることが出来ません。
ちなみに、動きの詳細は以下の通りです。
1.ラジオボタン「ケースA」を選択すると…
2.テキストボックスが入力不可となり、テキストボックスの背景色がグレーになる
3.「ケースB」「ケースC」を選択すると入力可でテキストボックス背景色は赤になる
4.いずれかを選択した状態でリセットボタンをクリックすると…
5.ラジオボタンはリセットされるが、背景色は残ったまま
6.リセットボタンを再度クリックすると、テキストボックスは全てがクリアされた状態(入力可・背景色白)に戻る
このような感じです。
現在のソースは以下の通りですが、どのようにしたらよいでしょうか?
(javascriptは得手では無いので、本来ならもっと簡略できるのかもしれませんが、ご了承ください。m(__)m)
[JAVASCRIPTソース]
function DisAble() {
if(document.input.case[0].checked == true ) {
document.input.text1.disabled = true;
document.input.text1.style.backgroundColor='#cccccc';
return false;
} else if ((document.input.case[1].checked == true ) || (document.input.case[2].checked == true )){
document.input.text1.disabled = false;
document.input.text1.style.backgroundColor='#ff0000';
return false;
} else { // リセットボタンを2回クリックするとようやく以下の設定になる。
document.input.text1.disabled = false;
document.input.text1.style.backgroundColor='#ffffff';
return false;
}
}
[HTMLソース]
<body>
<form name="form1">
<!-- ラジオボタン -->
<input type="radio" name="case" value="A" onClick="DisAble()">ケースA(入力不可)
<input type="radio" name="case" value="B" onClick="DisAble()">ケースB(入力可)
<input type="radio" name="case" value="C" onClick="DisAble()">ケースC(入力可)
<!-- テキストボックス -->
<input type="text" name="text1">
<!-- 送信・リセットボタン -->
<input type="submit" value="送信">
<input type="reset" value="リセット" onClick="DisAble()">
</form>
</body>
以上です。分かりづらい説明で申し訳ございませんが、どなたか、どうぞお知恵をお願いいたします。
No.1ベストアンサー
- 回答日時:
関数DisAbleを引数つきにして 場合分けすればいいのでは
function DisAble(n) {
if( n == 1 ) {
// ケースA
document.input.text1.disabled = true;
document.input.text1.style.backgroundColor='#cccccc';
// return false;
} else if ( (n == 2 ) || (n == 3 )){
// ケースB or ケースC
document.input.text1.disabled = false;
document.input.text1.style.backgroundColor='#ff0000';
// return false;
} else { // リセットボタンを2回クリックするとようやく以下の設定になる。
document.input.text1.disabled = false;
document.input.text1.style.backgroundColor='#ffffff';
// return false;
}
return true;
}
呼び出し側を
<input type="radio" name="case" value="A" onClick="return DisAble(1);">ケースA(入力不可)
<input type="radio" name="case" value="B" onClick="return DisAble(2);">ケースB(入力可)
<input type="radio" name="case" value="C" onClick="return DisAble(3);">ケースC(入力可)
<!-- テキストボックス -->
<input type="text" name="text1">
<!-- 送信・リセットボタン -->
<input type="submit" value="送信">
<input type="reset" value="リセット" onClick="return DisAble(0);">
といった具合に return DisAble( 0 ); などといった具合にします
関数からの戻り値を受ける場合は return付きで記述しましょう
ラジオボタンのonClickで falseが返されるとクリックされなかったことになります つまり状態の変化が起きないことになります
リセットボタンののonClickでfalseが返されるとこちらもクリックされていないことになり ラジオボタンのリセットもされません
returnなしで関数を設定すると 関数からの戻り値は無視されるともいます
この回答への補足
ご回答ありがとうございます。
早速、試させていただきました。思ったとおりに動きました!
ありがとうございます。
ただ、もし可能なら…なのですが…
リセットではなく再読み込みした場合なのですが、ボタンの選択情報は残るのですが、背景色や入力設定がリセットされてしまいます。
これは致し方ないことなのでしょうか?
もし、可能なら再読み込みでリセットされない方法はありますでしょうか?
何か御存知でしたらご教示ください。
宜しくお願い申し上げます。
No.4
- 回答日時:
bodyタグのonloadイベントを処理してやればいいように思います
<body onload="return myDisable();">
などとしておいて
function myDisable()
{
if ( document.input.case[0].checked ) {
return DisAble( 1 );
} else if ( ( document.input.case[1].checked ) ||
(document.input.case[2].checked ) ) {
return DisAble( 2 );
} else {
return DisAble( 0 );
}
return true;
}
といった具合にしてやればいいと思います
なるほど、どうもありがとうございました。
やってみます。
おかげ様でどうにかなりました。
本当にありがとうございました。m(__)m
No.3
- 回答日時:
やりなおし
<html>
<script>
function re2(){
o=document.getElementsByName('case2');
for(i=0;i<o.length;i++) if(o[i].checked){
for(j=0;j<o.length;j++) o[j].checked=false;
return;
}
tx(false,'');
document.getElementById('tx1').value='';
}
function tx(f,c){
with(document.getElementById('tx1')){ disabled=f; style.backgroundColor=c; }
}
</script>
<body>
<form name="form1">
<input type="radio" name="case2" value="A" onClick="tx(true,'#ccc')">ケースA(入力不可)
<input type="radio" name="case2" value="B" onClick="tx(false,'#f00')">ケースB(入力可)
<input type="radio" name="case2" value="C" onClick="tx(false,'#f00')">ケースC(入力可)
<input type="text" name="text1" id="tx1">
<input type="submit" value="送信">
<input type="button" value="リセット" onClick="re2()">
</form>
</body></html>
ご回答いただきありがとうございます。
大変勉強になりました。
今回、他の条件との兼ね合いもあり、使用は出来なかったのですが、
ぜひとも今後の参考にさせていただきます。
本当にありがとうございました。m(__)m
No.2
- 回答日時:
<html>
<script>
function re2(){
o=document.getElementsByName('case2');
for(i=0;i<o.length;i++) if(o[i].checked) return true;
tx(false,''); return false;
}
function tx(f,c){
with(document.getElementById('tx1')){ disabled=f; style.backgroundColor=c; }
}
</script>
<body>
<form name="form1">
<input type="radio" name="case2" value="A" onClick="tx(true,'#ccc')">ケースA(入力不可)
<input type="radio" name="case2" value="B" onClick="tx(false,'#f00')">ケースB(入力可)
<input type="radio" name="case2" value="C" onClick="tx(false,'#f00')">ケースC(入力可)
<input type="text" name="text1" id="tx1">
<input type="submit" value="送信">
<input type="reset" value="リセット" onClick="return re2()">
</form>
</body></html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(jQuery)ラジオボタン選択値を...
-
チェックボックス とラジオボ...
-
ボタンの無効化
-
チェックボックスのON/OFFに連...
-
Jvasvriptのlengthで個数が取得...
-
ラジオボタンにタブインデック...
-
ラジオボタンの値でリンク先を...
-
【急】ラジオボタンで選択問題
-
JavaScriptをつかってプログラ...
-
こういうプログラミングを作り...
-
ラジオボタンのチェックが外れ...
-
return trueとreturn falseの用...
-
【jQuery】input nameの文字列...
-
現在時刻を取得してフォームのs...
-
tableの任意行にfocusをあてる
-
Selectボックスの幅を自動で広...
-
セレクトを全て選択されていな...
-
value内に変数を入れたい
-
ハイパーリンクを別ウインドウ...
-
一覧から選択した行の行番号を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ラジオボタンにタブインデック...
-
フォームPOST後「戻る」時のチ...
-
ラジオボタンのチェックが外れ...
-
データベースの値を判断してラ...
-
チェックされたラジオボタンに...
-
Jvasvriptのlengthで個数が取得...
-
JavaScript ラジオボタン デ...
-
radio選択をクッキーに保存させ...
-
VBA IE ラジオボタンに...
-
javascriptを使ってラジオボタ...
-
jQueryで複数のラジオボタンを処理
-
ラジオボタンで選択した項目の...
-
ラジオボタンを使った簡単なア...
-
アンダーバーのname値は取得で...
-
チェックボックスのON/OFFに連...
-
ラジオボタンでの動的項目の変...
-
リセットボタンでクリアできな...
-
EXCEL VBA:IEの操作であるラジ...
-
ラジオボタンでdisabledとchecked
-
ラジオボタンの分岐方法に関して
おすすめ情報