\r\n \r\n\r\n```\r\ntest.js\r\n```javascript\r\nvar form = document.createElement('form');\r\nform.id = 'Form';\r\n\r\nvar out = document.createElement('output');\r\nout.name = 'op';\r\nform.appendChild(out);\r\nvar element = document.getElementsByTagName('h1')[0];\r\nelement.appendChild(form);\r\n\r\nvar el = document.getElementById('Form');\r\nvar text = document.createElement('input');\r\ntext.type = 'text';\r\ntext.name = 'a'\r\nel.appendChild(text);\r\n\r\nvar btn = document.createElement('button');\r\nbtn.type = 'button';\r\nbtn.onclick= \"op.value = a.value\" //ここが上手くいかない\r\nvar submit = document.createTextNode(\"submit\");\r\nbtn.appendChild(submit);\r\nel.appendChild(btn)\r\n\r\n```\r\nonclickを追加する場合、test.jsの下から4行目のようにかけるかと思ったのですがうまくできませんでした\r\nJavaScriptで追加したbuttonにさらにonClick処理を追加するにはどうしたらよいのでしょうか?\r\n\r\nまた、タイトルには記していないことなのですが、button要素のtextContentを追加するとき、上記のtest.jsのように書くべきか、それとも次のように書くべきか、どちらがただしいのでしょうか\r\n\r\n\r\n```javascript\r\n//test.jsの下から6行分を書き換えました\r\nvar btn = document.createElement('button');\r\nbtn.type = 'button';\r\nbtn.onclick= \"op.value = a.value\" //ここが上手くいかない\r\nbtn.textContent = 'submit'\r\nel.appendChild(btn)\r\n```\r\n\r\nご教示お願いします","answerCount":2,"upvoteCount":0,"datePublished":"2016-09-30T17:57:04.958Z","dateModified":"2016-09-30T17:57:04.958Z","acceptedAnswer":{"@type":"Answer","text":"```JavaScript\r\nbtn.onclick= function() { // onclick には関数を入れる\r\n\t// \"op.value = a.value\"\r\n\tout.value = text.value;\r\n\t// outやtextはこれの前にvarで宣言しているので使えますが、\r\n\t// そうでない場合はidを付けてdocument.getElementById('aaa').value という感じで。\r\n};\r\n```**動くサンプル:**[https://jsfiddle.net/rwcb1sjr/](https://jsfiddle.net/rwcb1sjr/)\r\n\r\n---\r\n\r\n> button要素のtextContentを追加するとき、上記のtest.jsのように書くべきか、それとも次のように書くべきか、どちらがただしいのでしょうか \r\n\r\nどちらも問題ないと思います。テキスト以外を入れる場合は innerHTML や insertAdjacentHTML などがあります。\r\n\r\n【element.innerHTML - Web API インターフェイス | MDN】\r\n[https://developer.mozilla.org/ja/docs/Web/API/Element/innerHTML](https://developer.mozilla.org/ja/docs/Web/API/Element/innerHTML)\r\n\r\n【innerHTMLの代わりにinsertAdjacentHTML()を使ってみようか。(DOMおれおれAdvent Calendar 2015 ? 01日目) | Ginpen.com】\r\n[http://ginpen.com/2015/12/01/insertadjacenthtml-instead-of-innerhtml/](http://ginpen.com/2015/12/01/insertadjacenthtml-instead-of-innerhtml/)\r\n\r\n---\r\n\r\nちなみにh1要素にform要素を入れるのは文法違反なので避けましょう。\r\n\r\n【form 要素 - HTML | MDN】\r\n[https://developer.mozilla.org/ja/docs/Web/HTML/Element/form](https://developer.mozilla.org/ja/docs/Web/HTML/Element/form)\r\n\r\n【h1 要素 - HTML | MDN】\r\n[https://developer.mozilla.org/ja/docs/Web/HTML/Element/h1](https://developer.mozilla.org/ja/docs/Web/HTML/Element/h1)","dateModified":"2016-09-30T18:28:32.633Z","datePublished":"2016-09-30T18:28:32.633Z","upvoteCount":2,"url":"https://teratail.com/questions/49894#reply-79897"},"suggestedAnswer":[{"@type":"Answer","text":"javascript onclick 追加 動的\r\nで google 検索すると情報をえられると思います。\r\n\r\n参考情報:\r\n- クリックで要素を追加・削除・操作する。 [http://moriawase.net/onclick-ivent](http://moriawase.net/onclick-ivent)\r\n- JQueryのclick()とon()の違いについて [http://solutionware.jp/blog/2015/11/16/jquery%E3%81%AEclick%E3%81%A8on%E3%81%AE%E9%81%95%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/](http://solutionware.jp/blog/2015/11/16/jquery%E3%81%AEclick%E3%81%A8on%E3%81%AE%E9%81%95%E3%81%84%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)\r\n\r\nonclick を設定するより、\r\njquery をつかって on() でイベント発生時の動作を定義するようにしたほうが良いと思います。","dateModified":"2016-09-30T22:13:54.192Z","datePublished":"2016-09-30T22:13:54.192Z","upvoteCount":0,"url":"https://teratail.com/questions/49894#reply-79906","comment":[{"@type":"Comment","text":"回答ありがとうございます\r\nこういった場合はjqueryを使ったほうがいいんですね\r\njqueryで書くべきかjavascriptで書くべきか使い分けが難しいです\r\n","datePublished":"2016-10-01T03:45:01.580Z","dateModified":"2016-10-01T03:45:01.580Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/JavaScript","name":"JavaScriptに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/49894","name":"動的に生成したbuttonにonClickを追加したい"}}]}}}
質問するログイン新規登録

Q&A

解決済

2回答

50535閲覧

動的に生成したbuttonにonClickを追加したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2016/09/30 17:57

0

1

test.html

html

1<html> 2 <body> 3 <h1>a</h1> 4 <script src="./test.js"></script> 5 </body> 6</html>

test.js

javascript

1var form = document.createElement('form'); 2form.id = 'Form'; 3 4var out = document.createElement('output'); 5out.name = 'op'; 6form.appendChild(out); 7var element = document.getElementsByTagName('h1')[0]; 8element.appendChild(form); 9 10var el = document.getElementById('Form'); 11var text = document.createElement('input'); 12text.type = 'text'; 13text.name = 'a' 14el.appendChild(text); 15 16var btn = document.createElement('button'); 17btn.type = 'button'; 18btn.onclick= "op.value = a.value" //ここが上手くいかない 19var submit = document.createTextNode("submit"); 20btn.appendChild(submit); 21el.appendChild(btn) 22

onclickを追加する場合、test.jsの下から4行目のようにかけるかと思ったのですがうまくできませんでした
JavaScriptで追加したbuttonにさらにonClick処理を追加するにはどうしたらよいのでしょうか?

また、タイトルには記していないことなのですが、button要素のtextContentを追加するとき、上記のtest.jsのように書くべきか、それとも次のように書くべきか、どちらがただしいのでしょうか

javascript

1//test.jsの下から6行分を書き換えました 2var btn = document.createElement('button'); 3btn.type = 'button'; 4btn.onclick= "op.value = a.value" //ここが上手くいかない 5btn.textContent = 'submit' 6el.appendChild(btn)

ご教示お願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

JavaScript

1btn.onclick= function() { // onclick には関数を入れる 2 // "op.value = a.value" 3 out.value = text.value; 4 // outやtextはこれの前にvarで宣言しているので使えますが、 5 // そうでない場合はidを付けてdocument.getElementById('aaa').value という感じで。 6}; 7```**動くサンプル:**[https://jsfiddle.net/rwcb1sjr/](https://jsfiddle.net/rwcb1sjr/) 8 9--- 10 11> button要素のtextContentを追加するとき、上記のtest.jsのように書くべきか、それとも次のように書くべきか、どちらがただしいのでしょうか 12 13どちらも問題ないと思います。テキスト以外を入れる場合は innerHTML や insertAdjacentHTML などがあります。 14 15【element.innerHTML - Web API インターフェイス | MDN16[https://developer.mozilla.org/ja/docs/Web/API/Element/innerHTML](https://developer.mozilla.org/ja/docs/Web/API/Element/innerHTML) 17 18【innerHTMLの代わりにinsertAdjacentHTML()を使ってみようか。(DOMおれおれAdvent Calendar 2015 ? 01日目) | Ginpen.com】 19[http://ginpen.com/2015/12/01/insertadjacenthtml-instead-of-innerhtml/](http://ginpen.com/2015/12/01/insertadjacenthtml-instead-of-innerhtml/) 20 21--- 22 23ちなみにh1要素にform要素を入れるのは文法違反なので避けましょう。 24 25【form 要素 - HTML | MDN26[https://developer.mozilla.org/ja/docs/Web/HTML/Element/form](https://developer.mozilla.org/ja/docs/Web/HTML/Element/form) 27 28【h1 要素 - HTML | MDN29[https://developer.mozilla.org/ja/docs/Web/HTML/Element/h1](https://developer.mozilla.org/ja/docs/Web/HTML/Element/h1)

投稿2016/09/30 18:28

kei344

総合スコア69643

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/01 03:42

ご丁寧にサンプルコードまで載せていただきありがとうございます。 大変わかりやすく参考になりました。
guest

0

javascript onclick 追加 動的
で google 検索すると情報をえられると思います。

参考情報:

onclick を設定するより、
jquery をつかって on() でイベント発生時の動作を定義するようにしたほうが良いと思います。

投稿2016/09/30 22:13

katoy

総合スコア22328

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/01 03:45

回答ありがとうございます こういった場合はjqueryを使ったほうがいいんですね jqueryで書くべきかjavascriptで書くべきか使い分けが難しいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問