前回も同じタイトルで質問させて頂いております。
追記でも入りきれなかったので新しくあげました。
長くなりますが見て頂けると助かります。
コードがこちらです。
<style>
#lean_overlay{
position: fixed; z-index:100;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
background: #000;
display: none;
}
.modal{
display: none;
background: none repeat scroll 0 0 #FFC0C0;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.7);
display: none;
padding: 30px;
width: 780px;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9 …
<script src="js/jquery.leanModal.min.js"></script>
<script>//ラジオ--------------------------------------------
function onRadioButtonChange() {
check1 = document.form1.Radio1.checked;
check2 = document.form1.Radio2.checked;
check3 = document.form1.Radio3.checked;
target = document.getElementById("output");
if (check1 == true) {
target.innerHTML = "ラジオ1";
}
else if (check2 == true) {
target.innerHTML = "ラジオ2";
}
else if (check3 == true) {
target.innerHTML = "ラジオ3";
}
}
window.onload = function onLoad() {
target = document.getElementById("output");
target.innerHTML = "選択してください";
}
</script>
<script>//セレクト--------------------------------------------
function onButtonClick() {
selindex = document.form1.Select1.selectedIndex;
target = document.getElementById("output1");
switch (selindex) {
case 0:
target.innerHTML = "セレクト1";
break;
case 1:
target.innerHTML = "セレクト2";
break;
case 2:
target.innerHTML = "セレクト3";
break;
}
}
window.onload = function onLoad() {
target = document.getElementById("output1");
target.innerHTML = "選択してください";
}
</script>
<script>
function hoge(){
var r=$('[name=r]:checked').val();
var s=$('[name=s]').val();
var target = document.getElementById("output3");
var list={
"1":{"5":"text_1_5","6":"text_1_6","7":"text_1_7"}
,"2":{"5":"text_2_5","6":"text_2_6","7":"text_2_7"}
,"3":{"5":"text_3_5","7":"text_3_7"}};
if(typeof list[r]!=="undefined" && typeof list[r][s]!=="undefined"){
return list[r][s];
}else{
return "nodata";
}}
window.onload = function onLoad() {
target = document.getElementById("output3");
target.innerHTML = hoge();
}
$(function() {
$( 'a[rel*=leanModal]').leanModal({
top: 100, // モーダルウィンドウの縦位置を指定
overlay : 0.5, // 背面の透明度
});
});
</script>
<form name="form1">
<input type="radio" name="r" value="1" id="Radio1" onchange="onRadioButtonChange();">1<br>
<input type="radio" name="r" value="2" id="Radio2" onchange="onRadioButtonChange();">2<br>
<input type="radio" name="r" value="3" id="Radio3" onchange="onRadioButtonChange();">3<br>
</select>
<select name="s" id="Select1">
<option value="">-</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
</form>
<br>
<a rel="leanModal" href="#mymodal" onClick="onButtonClick()">Modal</a>
<div id="mymodal" class="modal">
<p id="output"></p>
<p id="output1"></p>
<p id="output3"></p>
</div>
モーダルウインドウ内に
①ラジオボタンから取得した内容のテキスト
②セレクトボックスから取得した内容のテキスト
③ラジオボタンとセレクトボックス2つ情報を取得してテキストを書き出す方法
この3つをjavascriptで設定しています。
(③は前回の質問でご教授頂いた内容を少し変えています。)
ここからが質問なんですが
①と②の内容は問題なく表示出来るのですが、③の内容がnodateとなってしまうのは何故でしょうか?
私の推測では記述方法を間違えていると思うのですが、まだまだ勉強不足でつまづいています。
皆様のお力を貸してください。どうぞよろしくお願いします。
No.2
- 回答日時:
こんにちは。
なんだかパッチワーク感満載ですね。
ご質問の事象の直接の原因は、hoge()が呼び出されるのはwindow.onloadで定義している最初の1回だけだからでしょう。
onload時には、(明示がないので)デフォルトとして最初のoptionが選択されていますが、value=""なのでnodataがセットされます。
前回の質問は見ていませんが、そちらの回答ではセレクトの状態が変わったら実行されるようになっていたのではないでしょうか?
差し出がましいですが、全体的に気付いた点を・・・
1)leanModalというライブラリを利用なさっていると推測しますが、これはjQuery利用のライブラリなので、どうせ使うなら全体をjQueryで記述したほうが簡単になることでしょう。
(特にname属性をそのまま要素名として特定に用いるのは、失敗するケースがあるので、あまりお勧めできません)
2)window.onloadが3箇所に見られますが、登録できる関数は一つなので、定義する毎に上書きれることになります。結局、実行されるのは、最後のものだけとなります。(ご提示の場合は、hogeだけが実行される)
3)>①と②の内容は問題なく表示出来るのですが
②は正しく動作しているとは思えません。なぜならoptionが4つあるのに対して、処理が明示されているのは3種類のみなので。
4番目は、その前の成り行きで・・というのが意図的でしたら、正しく処理されていることになりますが…
4)処理全体として、個々のHTML要素にイベントを設定していますが、リアルタイムに処理しても、実際に使われるのはモーダルウィンドウ表示時ですので、値の反映は表示時(表示直前)にまとめて行えば充分ではないでしょうか?
一方で、leanModalはクリックで自動実行されてしまい、直前を拾えるイベント等が用意されていないようですので、次善の考えとして、formが変わったら(change時)まとめて処理するといった方法が考えられます。
5)Modalクリック時のイベントとしてonButtonClickが設定されていますが、イベントを複数設定した場合の実行順序は保証されていなかったと記憶していますので、ご提示のスクリプトで「onButtonClickの処理が表示前に必ず実行される」とは必ずしも期待できないような気がします。(記憶が曖昧なので、自信はありませんが・・・)
fujillin様
ご丁寧に教えて頂きありがとうございます。
とても分かりやすい解説で自分では気付けなかったことろだったので勉強になりました。
もっと勉強します!
お世話になりました!感謝しております!!
No.1ベストアンサー
- 回答日時:
>window.onload = function onLoad() {
jQueryのライブラリ使っているのだからonload処理はこの書式ではできない
そもそもやっていることもonload処理じゃないし
実際にはこんな感じ?
<style>
#lean_overlay{
position: fixed; z-index:100;
top: 0px;
left: 0px;
height: 100%;
width: 100%;
background: #000;
display: none;
}
.modal{
display: none;
background: none repeat scroll 0 0 #FFC0C0;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.7);
display: none;
padding: 30px;
width: 780px;
}
</style>
<script src="js/jquery.min.js"></script>
<script src="js/jquery.leanModal.min.js"></script>
<script>
function onRadioButtonChange() {
var r=$('[name=r]:checked').val();
var list={"1":"ラジオ1","2":"ラジオ2","3":"ラジオ3"};
var str=(typeof list[r]!=="undefined")?list[r]:"選択してください";
$('#output').text(str);
}
function onButtonClick() {
var s=$('[name=s]').val();
var list={"5":"セレクト5","6":"セレクト6","7":"セレクト7"};
var str=(typeof list[s]!=="undefined")?list[s]:"選択してください";
$('#output1').text(str);
}
function hoge(){
var r=$('[name=r]:checked').val();
var s=$('[name=s]').val();
var list={
"1":{"5":"text_1_5","6":"text_1_6","7":"text_1_7"}
,"2":{"5":"text_2_5","6":"text_2_6","7":"text_2_7"}
,"3":{"5":"text_3_5","7":"text_3_7"}
};
var str=(typeof list[r]!=="undefined" && typeof list[r][s]!=="undefined")?list[r][s]:"選択してください";
$('#output3').text(str);
}
$(function() {
$( 'a[rel*=leanModal]').leanModal({
top: 100,
overlay : 0.5,
});
$( 'a[rel*=leanModal]').click(function(){
onButtonClick();
onRadioButtonChange();
hoge();
});
});
</script>
<form name="form1">
<input type="radio" name="r" value="1" >1<br>
<input type="radio" name="r" value="2" >2<br>
<input type="radio" name="r" value="3" >3<br>
</select>
<select name="s" id="Select1">
<option value="">-</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
</select>
</form>
<br>
<a rel="leanModal" href="#mymodal">Modal</a>
<div id="mymodal" class="modal">
<p id="output"></p>
<p id="output1"></p>
<p id="output3"></p>
</div>
yambejp様
出来ました!!完成しました!!yambejp様のお陰です!
丁寧に何度も教えて頂き大変感激しております!!
正常に動いた時は涙が出ちゃいました!嬉しかったです。
これからもっと勉強してyambejp様のように回答者として戻って来れるよう努力します!
本当にお世話になりました。ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript jsで、switch文で書かれた分をif文にできませんか。 1 2022/07/28 15:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
プログラムがうまく動きません...
-
現在時刻を取得してフォームのs...
-
Selectの中身をfor文で入れる
-
document.form で nullまたは...
-
【javascript・PHP】プルダウン...
-
プルダウンとテキストの連動
-
javascriptでの2つのプルダウン...
-
jQuery セレクトボックスで選択...
-
html selectの内容を初期値に戻す
-
ブラウザの戻るボタンを押した...
-
UWSCのIE操作でプルダウンを選...
-
javascriptでselectボックスの<...
-
セレクトボックスで現在選択さ...
-
<textarea>にプルダウンを表示...
-
javaScriptで連動セレクトメニュー
-
Selectボックスの幅を自動で広...
-
ラジオボタンでポップアップメ...
-
リストボックスの項目の順番を...
-
return trueとreturn falseの用...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
Selectボックスの幅を自動で広...
-
Selectの中身をfor文で入れる
-
html selectの内容を初期値に戻す
-
CSVファイルを読みこみ、プルダ...
-
セレクトを全て選択されていな...
-
ブラウザの戻るボタンを押した...
-
JQuery selectが反映されない
-
jQuery セレクトボックスで選択...
-
セレクトの値を取得できない
-
テーブルにおける行(セルにプル...
-
現在時刻を取得してフォームのs...
-
javascriptでの2つのプルダウン...
-
document.form で nullまたは...
-
リストボックスの項目の順番を...
-
onFocusOutが複数回呼ばれる!
-
javascriptでselectボックスの<...
-
プログラムがうまく動きません...
-
親子連動型のselectを設置し、...
-
selectタグに直接onChangeを書...
おすすめ情報