• 締切済み

コードの意味(どのようなイベント発生など)を調べて

https://jsfiddle.net/jun68ykt/p2uj40xn/43/は、面積を入力で坪数の計算と坪単価の計算するjavascriptでしたが、要望で価格(○○.○○万円)÷坪数(○○.○○坪)=坪単価で計算するjavascriptに直す為にそのコードをどのように直すかをやる前にソースコードを理解しないと出来ないと思い、調べながら、修正していました。 昨日、修正したいと要望があって、htmlとjavascriptを修正しています。 で、自分で調べて、1つ1つ修正していますが、インターネットで調べても分からないことがありまして、ここで質問しさせてください。 分からないことがいくつかがあります。 (1) var row = e.target.parentNode.parentNode;の「parentNode.parentNode」をインターネットで調べたら、「【JavaScript】(基礎)親要素・子要素の取得まとめ(2)」が出ました。 parentNodeを2つ付けるということは、祖先要素を取得するようなものだということで、htmlを見ますと、 <input>要素から見ると、<td>要素は親要素で、<tr>要素は祖先要素ということで、合っているでしょうか? (2) var pos = e.target.className.split(/\s/)[0];の「className.split」をインターネットで調べたら、「かもメモ」が出ました。 先日、修正したいと要望があって、htmlとjavascriptを修正しています。 で、自分で調べて、1つ1つ修正していますが、インターネットで調べても分からないことがありまして、ここで質問しさせてください。 分からないことがいくつかがあります。 (1) var row = e.target.parentNode.parentNode;の「parentNode.parentNode」をインターネットで調べたら、「【JavaScript】(基礎)親要素・子要素の取得まとめ(2)」が出ました。 parentNodeを2つ付けるということは、祖先要素を取得するようなものだということで、htmlを見ますと、 <input>要素から見ると、<td>要素は親要素で、<tr>要素は祖先要素ということで、合っているでしょうか? (2) var pos = e.target.className.split(/\s/)[0];の「className.split」をインターネットで調べたら、「かもメモ」が出ました。 「className.split」は、class名を取得するときに使うそうですが、「(/\s/)[0]」って、どういうことですか? それをインターネットで調べたら、これが出ました。 https://stackoverflow.com/questions/28127794/difference-between-split-s-and-split しかし、上記のサイトは、(/\s+/)のことを 『1つの空白文字(タブ、改行、改行、垂直タブ、フォームフィード)を1回と無制限の時間で一致させます。』 ↑ Match a single whitespacecharacter (tab, line feed, carriage return, vertical tab, form feed) between one and unlimmited times. でも、 (/\s/)のことは載っていませんでした。 [0]は、どいうことかな? あと、『1つの空白文字(タブ、改行、改行、垂直タブ、フォームフィード)を1回と無制限の時間で一致させます。』を読んでもどういうことか?は分かりませんでした。 (3) switch(pos)は、条件分岐するものですが、switch(pos) { }の中身が難しくてどういう働きするのか?の分析ができませんでした。 頑張って調べても分からないことがありましたので、すみませんが、よろしくお願いします。

みんなの回答

回答No.9

ちょっとぉ >おそらく「質問の範囲が広すぎる」が根本的な問題です。 私の示したスクリプトは無駄に長く書いているだけで ショートコーディングしたら数行(1行?)ですみます。 たったそれくらいを質問者が理解できないはずがないではないでしょう! 今に立派なプログラマーに成長するに違いない! 本当はエスパーじゃないことを白状しますが。

  • think49
  • ベストアンサー率59% (285/482)
回答No.8

おそらく「質問の範囲が広すぎる」が根本的な問題です。 https://ja.stackoverflow.com/help/mcve 回答されても理解できないのは前提となる基礎知識が大きく欠けているからです。 JavaScriptとDOMについて基礎的なAPIを全て頭に叩き込んでから、本課題に取り組んでください。 自分の力量を大きく超える課題に取り組んでも時間を浪費するだけです。 https://developer.mozilla.org/ja/docs/Learn/JavaScript https://developer.mozilla.org/ja/docs/DOM --- 二次被害が広まらないよう書いておきますが、amaryllis_watchさんが出しているコードは IE, Android(Google Chrome)が動作要件に入っています。 https://teratail.com/questions/144292 > amaryllis 2018/09/03 13:30 > jun68yktさん、気づいた点があります。 > 1つめは、IE系ブラウザに対応してない。 > 2つめは、AndroidでGoogle Chromeのブラウザで小数点入力が出来ない(坪単位入力欄)。 ちなみに、この質問はteratailのamaryllis名義で質問されている内容と同一なので、これから回答する方はマルチポスト先で同じ内容が回答されていないか確認した方が良いです。 https://teratail.com/users/amaryllis#question Re: amaryllis_watch さん

回答No.7

後出しジャンケンには付き合っていられません。 何か要望を満たすと、次は。。。その繰り返しとなります 私はエスパーなのでわかります。 いまさらIEといわれても、なにそれ? 今更ですが質問のタイトルの意義もすでに違っています。 締め切って質問内容を的確に表現したタイトルで質問しなおしなさい。 良い質問には良い答えが返ってきます。 これは質問ではなく結局丸投げです。 最低です。

回答No.6

最初に示したコードが一切使われていないのね 入力に対してエラーがあった場合の処理は無視。 全角空白は半角にでもちかんしてね <!DOCTYPE html> <meta charset="UTF-8">  <html lang="ja">  <title>?</title>  <style>   #T, #T td, #T th {     border: solid 1px #000;     border-collapse: collapse;     }             #T th {        background-color: #aaa;        }                  #T td {          padding: 5px;         }                  #T tr td:last-of-type {          width : 150px;        }              #T input {       font-size: 16px;      width: 100px;    }       #T input[readonly] {   background: #eee;  }   #T tr td:last-of-type input {   text-align: right;  }             input.error {      background-color: #d14;      }                               </style>                  <body>                  <table id="T">          <tr>          <th>区画名         <th>面積        <th>坪数        <th>価格       <th>坪単価          <tr>     <td><input>    <td><input> m2   <td><input readonly> 坪   <td><input> 万円   <td><input readonly> 円 <tr> <td><input> <td><input> m2   <td><input readonly> 坪   <td><input> 万円   <td><input readonly> 円    <tr>     <td><input>     <td><input> m2      <td><input readonly> 坪       <td><input> 万円        <td><input readonly> 円       </table>                           <script>         const          table = document.querySelector ('#T'),          getNum = e => parseFloat (e.value),                   handler = (event) => {         let        inp = event.target,        tr = inp.parentNode.parentNode,       inps = tr.querySelectorAll ('input, output'),      tubo = getNum (inps[1]) / 0.3025,     tanka = getNum (inps[3])*10000 / tubo;          inps[2].value = isNaN (tubo) ? '' : tubo.toFixed (2);   inps[4].value = isNaN (tanka) ? '': tanka.toFixed (2);   } table.addEventListener ('input', handler, false);    </script>         

amaryllis_watch
質問者

補足

ありがとうございます。 スマホでテストしてみました。 正常に働きましたが、会社のPCは、IE系ブラウザを使用しているので、IE系ブラウザでテストしたら、面積のinputに入力すると「×」が表示され、リアルタイム計算出来ません。 Google chromeは未確認です。

回答No.5

丸投げだと嫌だ!

amaryllis_watch
質問者

補足

htmlが <table> <tr> <th>区画名</th> <th>面積</th> <th>坪数</th> <th>価格</th> <th>坪単価</th> </tr> <tr> <td><input type="text" name="se01_a" class="se_a" value=""></td> <td><input type="text" name="se01_b" value="" class="se_b"> m2</td> <td><input type="text" name="se01_c" value="" class="se_c tsubo"> 坪</td> <td><input type="text" name="se01_d" value="" class="se_d kingaku"> 万円</td> <td class="result"><span class="tubotan"></span></td> </tr> <tr> 上記の同じコードを5セット~10セット </tr> </table> にして、javascriptは、 var inputs = document.getElementsByTagName('input'); for (var i=0; i < inputs.length; i ++ ) { inputs[i].addEventListener('input', inputHandler); } function inputHandler(e) { var value = 0; var row = e.target.parentNode.parentNode; var pos = e.target.className.split(/\s/)[0]; switch(pos) { case 'se_b': e.target.value = e.target.value.replace(/[^0-9.]/,''); if (/^[0-9]*(\.[0-9]*)?$/.test(e.target.value)) { value = Number(e.target.value); e.target.className = e.target.className.replace(' error',''); price({ se_b: value, row }); } else { if (e.target.className.indexOf('error') < 0) e.target.className += ' error'; row.getElementsByClassName('tsubo')[0].innerHTML = ''; row.getElementsByClassName('kingaku')[0].innerHTML = ''; } break; case 'se_c': value = Number(e.target.value.replace(/[^0-9]/g,'')); e.target.value = value > 0 ? value.toLocaleString('ja-JP') : ''; price({ se_c: value, row }); break; case 'se_d': value = Number(e.target.value.replace(/[^0-9]/g,'')); e.target.value = value > 0 ? value.toLocaleString('ja-JP') : ''; price({ se_d: value, row }); break; default: break; } } function price({se_b, se_c, se_d, row }) { if (!row) return; var se01bNode = row.getElementsByClassName('se_b')[0]; var se01cNode = row.getElementsByClassName('se_c')[0]; var se01dNode = row.getElementsByClassName('se_d')[0]; se_b = (se_b >= 0 ? se_b : Number(se01bNode.value)); se_c = (se_c >= 0 ? se_c : Number(se01cNode.value.replace(/[^0-9]/g,''))); se_d = (se_d >= 0 ? se_d : Number(se01dNode.value)); var tsubo = se_b * 0.3025; var kingaku = tsubo * se_c; var tsubotan = se_d / se_c; tsubo = Math.floor(tsubo * 10.0) / 10.0; // 少数点第2位以下を切り捨て var tsuboNode = row.getElementsByClassName('tsubo')[0]; var kingakuNode = row.getElementsByClassName('kingaku')[0]; var tsubotanNode = row.getElementsByClassName('tsubotan')[0]; tsuboNode.innerHTML = (tsubo > 0 ? `${tsubo}` : ''); kingakuNode.innerHTML = (kingaku > 0 ? `${kingaku.toLocaleString('ja-JP')}` : ""); tsubotanNode.innerHTML = (tsubotanNode > 0 ? `${tsubotanNode}` : ''); } にしてみたけど全然ダメです。 リアルタイムに計算されてない。 あと、se_cの坪数に小数点入力ができない。 私はjavascriptに詳しくなく、あのままのコードに追加や関数の一部に変更くらいしかできずにしています。 本当は、se_bとse_cとse_dは通常入力で「se_d / se_c」で計算したのを<span class="tubotan"></span>に表示するコードにしたかったが、できなかった。

回答No.4

ちょっとだけ解説 イベントは親要素(document)で監視する。今回は #T イベントが発生したらそのイベントが発生した要素を取得する input要素なのだからちょっと省いて、親の親 tr を取得 その tr 要素の子の中から input要素を抜き出す input要素の番号を指定しながら計算する 結果を書き出す input要素に個別にイベントを貼りつけるなんてあほらしい classの指定もマジソレ必要?ってかんじ。

amaryllis_watch
質問者

補足

https://jsfiddle.net/jun68ykt/p2uj40xn/43/は、他の人に作ってもらったんで、それを自分なりに変えようとしても、難しくてとても出来ませんでした。 変えても自動計算で表示も出来ない。 どれかが悪いのかも分からない。 申し訳ございませんが、どのようなコードにするかを教えて頂けませんでしょうか。

回答No.3

ゴメン。私の書いたものはあきらめて!

回答No.2

ずいぶん面倒なコードですね。簡単にしてみました。 <!DOCTYPE html> <meta charset="UTF-8"> <html lang="ja"> <title>?</title> <style> #T input {text-align: right; } #T tr td:first-of-type input { color: red; } #T tr td:nth-of-type(2) input { color: blue; } #T tr td:nth-of-type(3) input { color: green; } </style> <body> <table id="T">  <tr>   <th>金額(円)   <th>坪数   <th>坪単価(円/坪)  <tr>   <td><input>   <td><input>   <td><input readonly>  <tr>   <td><input>   <td><input>   <td><input readonly> </table> <script> const  table = document.querySelector ('#T'),  getNum = e => parseFloat (e.value),    handler = (event) => {   let    inp = event.target,    tr = inp.parentNode.parentNode,    inps = tr.querySelectorAll ('input'),    tubotanka = getNum (inps[0]) / getNum (inps[1]),    rst = isNaN (tubotanka) ? 'error' : tubotanka.toFixed (2) + ' 円';   inps[2].value = rst;  } table.addEventListener ('input', handler, false); </script>

amaryllis_watch
質問者

補足

babu_babooさん、回答をありがとうございます。 訳あって、同じようなのを5~10セット作る必要があって、 javascritでは、「row」を使っています。 そして、質問した「価格(○○.○○万円)÷坪数(○○.○○坪)=坪単価で計算するjavascriptに直す」ためにjavascriptを直す際、そのコードはどういった動きやイベント発生などを調べて直していますが、私の知識では、ハードルが高くて、まだ直せていません。 https://jsfiddle.net/jun68ykt/p2uj40xn/43/では、 <tr> <th></th> <th>平米数(m2)</th> <th class="result">坪数</th> <th>坪単価(円/坪)</th> <th class="result">金額(円)</th> </tr>  <tr>   <td><input type="text" class="se_a" value=""></td>   <td><input type="text" value="" class="se_b"></td>   <td class="result"><span class="tsubo"></span></td>   <td><input type="text" value="" class="se_c"></td>   <td class="result"><span class="kingaku"></span></td>  </tr> ↑ それを <tr> <th>区画名</th> <th>面積</th> <th>坪数</th> <th>価格</th> <th>坪単価</th> </tr> <tr> <td><input type="text" class="se_a" value=""></td> <td><input type="text" value="" class="se_b"> m2</td> <td><input type="text" value="" class="se_c"> 坪</td> <td><input type="text" value="" class="se_d"> 万円</td> <td class="result"><span class="tubotan"></span></td> </tr> に変更する。 javascriptで計算は、「tubotan = se01_d * se_c」にして、 「.getElementsByClassName('tubotan')」で <span class="tubotan"></span>に表示させる方法に変えるんです。 そのためにどうすれば、どこをどのように変えるか?をインターネットで調べていた。

  • t_ohta
  • ベストアンサー率38% (5085/13292)
回答No.1

(1) 貴方の理解で間違いないと思います。 (2) プログラムで文字列の一部を取得したりするのに『正規表現』と言うモノを使用します。 正規表現は多くの言語で使用される仕組みなので正規表現で検索して勉強してみましょう。 (3) switch分は if (pos == 1) {  処理A; } else if (pos == 2) {  処理B; } else if (pos == 3) {  処理C; } else {  処理D; } を switch (pos) { case 1:  処理A;  break; case 2:  処理B;  break; case 3:  処理C;  break; default:  処理D; } と置き換えたモノです。

関連するQ&A

  • 取得した要素がインライン要素かブロック要素かを判定する方法はないでしょうか?

    下の様に取得した要素が、インライン要素かブロック要素かを判断する方法はないでしょうか?  document.onclick = function(evt){   var e = evt?evt.target:event.srcElement;   for (i in e.parentNode.childNodes){    if(e.parentNode.childNodes[i].nodeType ==1 && e.parentNode.childNodes[i] != e){     if(e.parentNode.childNodes[i].style.display =="none"){      alert(e.parentNode.childNodes[i].tagName); /* ブロック要素かインライン要素かを判定したい!*/ /* インライン要素 */      e.parentNode.childNodes[i].style.display = "inline"; /* ブロック要素 */      e.parentNode.childNodes[i].style.display = "block";     }else{      e.parentNode.childNodes[i].style.display = "none";     }    }   }  }

  • テキストボックスに文字列やタグを挿入する方法

    テキストボックスのカーソルで選択した部分に文字列、もしくはタグを挿入させたいのですが、 例えば あいう|えお|でえおの部分をカーソルで選択して、何かボタンなどを押下すると自動で あいう<s>えお<s>といった具合にタグを挿入してほしいのです。 ホームページで調べたところ、 テキストエリアで実現する方法が下のURLでみつけたのですが、 http://archiva.jp/web/javascript/getRange_in_textarea.html テキストボックスで実行したいのですが、上の方法ではうまくいきません。 テキストボックスの場合どうすればいいのでしょうか? どなたか回答よろしくお願いいたします。 また、上のホームページで使われているJavaScriptを載せます。 function surroundHTML(tag, obj) { var target = document.getElementById(obj); var pos = getAreaRange(target); var val = target.value; var range = val.slice(pos.start, pos.end); var beforeNode = val.slice(0, pos.start); var afterNode = val.slice(pos.end); var insertNode; if (range || pos.start != pos.end) { insertNode = '<' + tag + '>' + range + '</' + tag + '>'; target.value = beforeNode + insertNode + afterNode; } else if (pos.start == pos.end) { insertNode = '<' + tag + '>' + '</' + tag + '>'; target.value = beforeNode + insertNode + afterNode; } } function getAreaRange(obj) { var pos = new Object(); if (isIE) { obj.focus(); var range = document.selection.createRange(); var clone = range.duplicate(); clone.moveToElementText(obj); clone.setEndPoint('EndToEnd', range); pos.start = clone.text.length - range.text.length; pos.end = clone.text.length - range.text.length + range.text.length; } else if (window.getSelection()) { pos.start = obj.selectionStart; pos.end = obj.selectionEnd; } return pos; alert(pos.start + "," + pos.end); } var isIE = (navigator.appName.toLowerCase().indexOf('internet explorer') + 1 ? 1 : 0);

  • JavaScript IDの複数読み込みについて

    JavaScript(プログラミング)はほとんど知識のないもので、 自分なりに調べたのですが、分からないので質問させていただきます。 下記のようなJavaScriptがあります。 window.onload = function() { var target = document.getElementById("●●"); target.addEventListener("touchstart", function(){this.className="touchstyle";}, false); target.addEventListener("touchend", function(){this.className="notouchstyle";}, false); } "●●"のほかに"▲▲" "■■"というIDを読み込ませたいのですが、 それは可能でしょうか。 ("xxx"はclass指定に変更でも構いません) 色々と試してみたのですが、うまくいかず困っております。 何卒ご教授のほど宜しくお願い致します。

  • フラグに名前を付けるには?

    spflagが0なら指定ID(i)のクラスaを除いてbを付加する、1なら逆のbを除いてaを付加するスクリプトの部分。 var spflag=0 function special(i,a,b){ if (spflag==0){ document.getElementById(i).className = document.getElementById(i).className.split(/\s+/).remove([a], ' '); document.getElementById(i).className = document.getElementById(i).className.split(/\s+/).merge([b], ' '); spflag=1;} else{ document.getElementById(i).className = document.getElementById(i).className.split(/\s+/).remove([b], ' '); document.getElementById(i).className = document.getElementById(i).className.split(/\s+/).merge([a], ' '); spflag=0;} } これのspflagにiの名前を(iはID)足してIDごとのフラグ管理を行いたいのですが、どのようにするのでしょうか?

  • Google Analytics トラッキングコードについて

    Google Analytics トラッキングコードについて ホームページのhead部分にこのスクリプトを埋め込んでくださいとありますが、 外部のJavaScriptに埋め込む方法はないでしょうか?外部のファイルにコピペしてみたのですがトラッキングコードを認識できませんでした。 <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-18744062-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script>

  • イベントevt?evt.target:event.srcElement;の意味合い

    以下の理解で合っているのでしょうか? よくイベントの取得で エレメント.onclick = function(evt){ var e = evt?evt.target:event.srcElement; } でeにイベントオブジェクトの発生元要素をセットしているのを見かけますが、 これは、ブラウザーの違いの吸収なのでしょうか? firefoxでは、イベントハンドラー関数にイベントオブジェクトが渡されるので、渡されたイベントオブジェクトよりevt.targetで発生元要素をセットし、一方IEでは、eventという名前のオブジェクトが存在している(?)ので、イベントハンドラー関数にイベントオブジェクトが渡されず、event.srcElementで発生元要素をセットする。  ※Opera、Safariは何でも良い IEの場合、後から、イベントが追加されたらeventオブジェクトはどうなるのでしょうか?ある要素の一つのイベントタイプには一つのイベントハンドラーしか定義できないのでしょうか?

  • appendChildを何処で書こうと、関数始めで動く物なのでしょうか

    appendChildを何処で書こうと、関数始めで動く物なのでしょうか?? javascript初心者です。 色々実験しているのですが、今理解に苦しむ状況に陥っています。 まず、要素がゆっくり下に動いた後、下の要素の子になる事を意図して書いた下のコードを見て下さい。 //スライドアクションelementをoffsetだけ1pxずつinterval毎に動かす。 function slideDownCloser(element, offset, interval){ element.style.position = "abusolute";//relativeにしても問題は同じ var pos = element.offsetTop; function goDown() { element.style.top = pos + "px"; pos += 1; if(offset>pos) { setInterval(goDown, interval); } else { element.style.position = "static"; } } return goDown; } このクロージャが返した関数を呼び出した直後にelementをappendChildで別の要素内に移そうとしても、どうやらelementが移動先の親要素を基準にして動いてしまいます。 例えば、簡単に書くとこのような関数を書いてもshitaElから100px動いてしまいます。。 function addElement(event) { var shitaEl = getElementById("shita"); var slideDown = slideDownCloser(event.target, 100, 30); slideDown(); shitaEl.appendChild(event.target); } なを、この現象はMac版のsafariとfirefoxで確認しました。。また、event.targetプロパティがIEでは読み込めないので、IEでは動かないと思います。

  • FIREFOXでのpostop

    現在、画像をブラウザ下から上へ移動する制御をJavaScriptにて行っております。 その際、IEでは正常に動作したのですが、FIREFOXで検証した所動作しませんでした。 原因はIEで使用した"posTop"がFIREFOXで使用できたなららしいです。 --------------------------------------------------------------- <script language=javascript> window.onload=move1; var TimeSet1 = 60; var step1 = 65; var stepcnt =0; var pos_data =0; var obj; function move1(){ stepcnt = 0; for (i = 1; i <= 5; i = i +1){ obj = document.getElementById('GridImg'+String(i)); pos_data = obj.style.posTop; pos_data = pos_data - 2; if(pos_data <= 100){ pos_data = 800; } obj.style.posTop = pos_data; } timerID1=setTimeout('move1()',TimeSet1); } </script> -------------------------------------------------------------- 上記を最小減の変更で修正したと思っております。 ご教授宜しくお願い致します。

  • onclickを使わずにイベント処理をする方法について。

    onclickを使わずにイベント処理をする方法について。 【<h1>をクリックすると同じ<div>を親に持つ<p>が表示/非表示】 されるようにしたいのですが、IEで動作せず、困っています。 下記は現在のコードです。 -------------------------------------------------------------------------- var divs = document.getElementsByTagName('div'); var listener = function(ev){ if(/(?:^|\s)text(?:$|\s)/.test(ev.target.className)){ var next = ev.target.nextSibling.nextSibling; if(next.style.display != "none"){ next.style.display = "none"; }else{ next.style.removeProperty("display"); } } }; if (document.addEventListener) { document.addEventListener('click', listener, false);// IE以外 } else { document.attachEvent("onclick", listener);// IE } -------------------------------------------------------------------------- <div> <h1 class="text">見出し</h1> <p>本文</p> </div> <div> <h1 class="text">見出し</h1> <p>本文</p> </div> <div> <h1 class="text">見出し</h1> <p>本文</p> </div> -------------------------------------------------------------------------- ev.target.classNameあたりが怪しく… window.event.srcElement.classNameに変更してみましたが動作しませんでした。 html側の制約があり、出来れば上記のようなclassのみのhtmlで、 更にわがままを言うと <div class="text"> <h1>見出し</h1> <p>本文</p> </div> のようにdivにclassを振った形で実現したいです。 なお、現在のコードは複数のサンプルコードを参考に試行錯誤したものですので 不要なコードが混ざっているかもしれません。 動作確認環境はIE7、IE8、Firefox、Safari(Windows)です。 納期が迫り大変困っています。アドバイスを頂けますと嬉しいです。 宜しくお願い致します。

  • プルダウンのメニューを表示を2つ設定。

    プルダウンのメニューを表示を2つ設定したいのですが、 どこが間違っているのでしょうか。 基本的にjsは、セレクタ名がかぶっていれば、機能しなくなります。 間違いをご指摘ください。 <!DOCTYPE html> <html> <head> <title></title> <script language="javascript" type="text/javascript"> function selectboxChange() { var val1 = document.forms.form1.Select1.value; var target = document.getElementById("output"); if (val1 == "要素1") { target.innerHTML = "合っています。"; } else { target.innerHTML = "間違っています。"; } } </script> </head> <body> <form name="form1" action=""> <select id="Select1" onchange="selectboxChange();"> <option>---</option> <option value1 == "要素1">要素1</option> <option>要素2</option> <option>要素3</option> <option>要素4</option> <option>要素5</option> </select> </form> <div id="output"></div> </body> </body> <script language="javascript" type="text/javascript"> function selectboxChange11() { var val11 = document.forms.form11.Select11.value; var target = document.getElementById("output11"); if (val11 == "要素11") { target.innerHTML = "合っています。"; } else { target.innerHTML = "間違っています。"; } } </script> </head> <body> <form name="form11" action=""> <select id="Select11" onchange="selectboxChange11();"> <option>---</option> <option value11 == "要素11">要素1</option> <option>要素2</option> <option>要素3</option> <option>要素4</option> <option>要素5</option> </select> </form> <div id="output11"></div> </body> </body> </html>