- ベストアンサー
selectのonChangeが動作しない
- createElementを使用してフォームを生成しているが、selectのonChangeが機能しない。
- 質問者は、コンボボックスが変更されたらアラートを表示したいが、うまく機能しない。
- 解決方法を教えてほしい。
- みんなの回答 (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 などでイベントをセットする方法もあります。
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
何をどうしたいのかがよくわかりませんが、ご提示のものが動作すればよいのであれば… 最後の document.getElementById('stasel')でエラーになっていますので、 (該当するidの要素がないので) 想像するところセレクト要素を取得したいのでしょうから、セレクトを生成した時に Slt.id = "stasel"; の定義をしておけば動作するようになります。 (querySelectorに未対応のブラウザだと動きませんが) でも、このままだと、ボタンを押される毎に同じidのセレクト要素が作成されることになってしまいます。 それなので、document.getElementById('stasel')も意図した要素が返されない可能性が…
補足
早速のご回答有難うございます。 まず、IDがないというご指摘ですが、23行目に「Slt.id = "stasel";」と記述しております。 ですので、IDがないのでエラーが出たとは思えないのですが間違っているでしょうか? もう1つの、「同じidのセレクト要素が作成される」という事ですが、ボタンを押したときに既に要素が作られていたら削除する仕様になっていますので、同じ要素が繰り返されることはありません。 一応関数として定義しているので、今回の質問には関係ないかと思い載せていませんでした。 querySelectorに未対応のブラウザについては、確認してみたいと思います
お礼
回答ありがとうございます。 教えて頂いた通り、書き直しましたところ意図した通り動作しました。 この度は本当にありがとうございました。