

createElementで、フォームを生成しています。
コンボボックスが変更されたら、アラームを表示させるようにしたいのですが上手くいきません。
どのようにしたら、良いのでしょうか?
よろしくお願いします。
以下ソースになります。
上から24行目付近で、selectにonChangeを設定しています。
--------------------------------------------------------------------
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>テスト</title>
<script type="text/javascript">
function test() {
var buf = document.createElement('div');
buf.innerHTML = document.form1.src.value;
var nodes = buf.querySelectorAll('*[class="line"]');
//formの生成
var Frm = document.getElementById("setform"); //要素を表示する場所(親要素)
var Form = document.createElement("form"); //新規にform要素を生成
Form.name = "dynform";
Frm.appendChild(Form); //Frmの子要素としてFormを追加
// select要素 コンボボックス作成
var Slt = document.createElement("select"); //selectタグを生成
Slt.name = "stasel";
Slt.id = "stasel";
Slt.onChange = "alert('今だ')"; //この部分でselectにonChange を設定している
Slt.size="1"; //コンボボックス用にサイズを1にする
for (var i=0; i<nodes.length; i++) {
var Ops = document.createElement("option");
if (/Firefox/.test(navigator.userAgent)) {
var regm = nodes[i].rows[0].cells[0].textContent.match(/20[0-9][0-9]年[0-1]?[0-9]月/);
} else {
var regm = nodes[i].rows[0].cells[0].innerText.match(/20[0-9][0-9]年[0-1]?[0-9]月/);
}
var listval = document.createTextNode(regm); //生成する要素の文字列
Ops.value = regm;
Ops.appendChild(listval); //Spnに表示する文字列追加
Slt.appendChild(Ops); //Sltの子要素としてOpsを追加
}
Frm.appendChild(Slt); //Frmの子要素としてSltを追加
var Br=document.createElement("br"); //改行
Frm.appendChild(Br); //Frmの子要素としてBrを追加
var Br=document.createElement("br"); //改行
Frm.appendChild(Br); //Frmの子要素としてBrを追加
document.getElementById('stasel').options[0].selected = true;
}
// -->
</script>
</head>
<body>
<p>自動出力</p>
<form name="form1">
<p>テキストエリアにソースを張り付けて下さい</p>
<p>
<textarea id="src" rows="5" cols="200">
</textarea>
</p>
<p>
<input type="button" value="実行" onClick="test()">
</p>
</form>
<div id="setform">
</div>
</body>
</html>
--------------------------------------------------------------------
以下の文をテキストエリアに入力しています。
--------------------------------------------------------------------
<table class="line">
<tr>
<td>2011年1月14日</td>
</tr>
</table>
<table class="line">
<tr>
<td>2011年2月14日</td>
</tr>
</table>
<table class="line">
<tr>
<td>2011年3月14日</td>
</tr>
</table>
<table class="line">
<tr>
<td>2011年4月14日</td>
</tr>
</table>
--------------------------------------------------------------------
No.2ベストアンサー
- 回答日時:
#1です。
>Slt.id = "stasel";」と記述しております。
大変失礼いたしました。 うっかり、見落としていました。
ただし、無条件でセレクト要素を追加しているので、対象とするclass="line"の要素が存在しない場合、空のセレクト要素になってしまうために、同じ行でoptions[0]が存在しないことでエラーになる可能性があります。(実はこれで勘違いしてしまいました)
>コンボボックスが変更されたら、アラームを表示させるようにしたいのですが上手くいきません。
肝心なところを書き忘れていましたね。(これまた失礼いたしました)
//Slt.onChange = "alert('今だ')"; //この部分でselectにonChange を設定している
Slt.onchange = function(){ alert('今だ'); };
で、いけるかと思います。
他の方法としては、
Slt.addEventListener( "change", function(){~~}, false ); //for fx
Slt.attachEvent( "onchange" , function(){~~} ); //for IE
などでイベントをセットする方法もあります。
回答ありがとうございます。
教えて頂いた通り、書き直しましたところ意図した通り動作しました。
この度は本当にありがとうございました。
No.1
- 回答日時:
何をどうしたいのかがよくわかりませんが、ご提示のものが動作すればよいのであれば…
最後の document.getElementById('stasel')でエラーになっていますので、
(該当するidの要素がないので)
想像するところセレクト要素を取得したいのでしょうから、セレクトを生成した時に
Slt.id = "stasel";
の定義をしておけば動作するようになります。
(querySelectorに未対応のブラウザだと動きませんが)
でも、このままだと、ボタンを押される毎に同じidのセレクト要素が作成されることになってしまいます。
それなので、document.getElementById('stasel')も意図した要素が返されない可能性が…
この回答への補足
早速のご回答有難うございます。
まず、IDがないというご指摘ですが、23行目に「Slt.id = "stasel";」と記述しております。
ですので、IDがないのでエラーが出たとは思えないのですが間違っているでしょうか?
もう1つの、「同じidのセレクト要素が作成される」という事ですが、ボタンを押したときに既に要素が作られていたら削除する仕様になっていますので、同じ要素が繰り返されることはありません。
一応関数として定義しているので、今回の質問には関係ないかと思い載せていませんでした。
querySelectorに未対応のブラウザについては、確認してみたいと思います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
何回やってもうまくいかないことは?
みなさんには、何回やってもうまくいかないことはありますか?
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
onchangeイベントを強制的に発生させる
JavaScript
-
selectタグに直接onChangeを書かないイベント取得方法
JavaScript
-
javascriptでセレクトボックスのselected"を動的につ"
JavaScript
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
selectのonChangeが動作しません
-
<JavaScript>tableタグを入力不...
-
javascriptでクリックするごと...
-
【jQuery】tableループ内のIDの...
-
画面表示とともに、テーブルの...
-
javascriptで文字を拡大・縮小...
-
テキストエリアに入力した改行...
-
javascriptで<table>背景色の取得
-
jQueryで合計を出したい
-
onchangeイベントを強制的に発...
-
【jQuery】input nameの文字列...
-
value内に変数を入れたい
-
ハイパーリンクを別ウインドウ...
-
jQueryのプラグイン「Tablesort...
-
一覧から選択した行の行番号を...
-
hiddenのvalueの値を変えたい
-
JavaScriptにて動的に配列を作...
-
slickのレスポンシブ > center...
-
二つの入力欄に、同時に同じ文...
-
JavaScriptのfileオブジェクト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<JavaScript>tableタグを入力不...
-
selectのonChangeが動作しません
-
テーブルの行数を可変長にした...
-
画面表示とともに、テーブルの...
-
javascriptで<table>背景色の取得
-
【jQuery】tableループ内のIDの...
-
javascript でテーブル操作
-
JQueryでテーブルの行を追加し...
-
tbody要素のinnerHTMLが書き換...
-
javascriptでクリックするごと...
-
テキストエリアに入力した改行...
-
csvファイルのデータを変数とし...
-
javascriptで画像をテーブルに...
-
動的なcheckboxのcheckedについて
-
プルダウンメニューを表の中に...
-
Javascriptでテーブルタグの座...
-
idの振り直しについて
-
html内>テーブル内に複数のjav...
-
Table内TDの子要素を移動させた...
-
クリックごとに文字色が交互に...
おすすめ情報