質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

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

Q&A

解決済

3回答

362閲覧

addEventListenerについて

beginner001

総合スコア29

JavaScript

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

0グッド

0クリップ

投稿2020/02/09 07:07

javascript

1<html> 2<body> 3<p id="sample">ここをクリックすると「こんにちは」と「さようなら」を表示する</p> 4 <script> 5 function sayHello(){ 6 document.write("こんにちは"); 7 } 8 function sayGoodbye(){ 9 document.write("さようなら"); 10} 11 let p = document.getElementById('sample'); 12 p.addEventListener("click", sayHello, false); 13 p.addEventListener("click",sayGoodBye,false); 14 15 </script> 16</body> 17</html>

addEventListenerを勉強中ですが、上記の記述ではクリックすると「こんにちは」が表示された後、クリックするところがないので「さようなら」を表示させることができません。document.writeの代わりにalertを用いた場合はこの2つの表示を出せたのですが、上記の記述に何を加えたらこの2つの表示を出せるのかが恥ずかしながら見当もつきません。
どなたかご教示いただけたら有難いです。

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

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

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

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

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

guest

回答3

0

上記の記述に何を加えたらこの2つの表示を出せるのかが恥ずかしながら見当もつきません。

上記の記述に追加して行うことは困難です。いったん表示が完了したあとにdocument.writeを使うと、HTMLドキュメント全体がリセットされてしまいます

document.writeを使うのはやめて、まったく別な形で結果を出すことを考えてください。

投稿2020/02/09 07:31

maisumakun

総合スコア146018

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

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

beginner001

2020/02/09 22:17

ありがとうございました。document.writeでHTMLがリセットされるのを始めて知りました。
guest

0

ベストアンサー

「さようなら」を表示させることができません

ご質問のコードは転記ミスでしょうか。
addEventListener のリスナに 宣言されていない sayGoodBye が定義されています。

  1. sayGoodbye ... 宣言された関数
  2. sayGoodBye ... 宣言されていない関数。

上記の記述に何を加えたらこの2つの表示を出せるのか

イベントの挙動を把握するだけであれば、console.log() / alert() ですが、
表示を実装する場合は、DOM操作になります。

  1. 表示用の要素をマークアップしておく
  2. 動的生成するかで対応できます。

element.innerHTML += anyHTMLValue など利用できます。

DOM 操作の一例

javascript

1let getParagraph = function(id){ 2 let elm = document.getElementById(id); 3 if( !elm ) { 4 elm = document.createElement("p"); 5 elm.id = id; 6 document.body.appendChild(elm); 7 } 8 return elm; 9} 10 11let elm = getParagraph("greeting"); // bodyに配備

投稿2020/02/09 10:06

AkitoshiManabe

総合スコア5434

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

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

beginner001

2020/02/09 22:20

appendChild やgetparagraphは知りませんでした。勉強します。 あるがとうございました。
AkitoshiManabe

2020/02/09 22:43

getParagraph は自前で作成した関数です。その中で行われる DOM の処理に着目してください。 「必要ならサブルーチン(ライブラリ)を作る。」というのも開発だと思います。
guest

0

前述にあるようにdocument.writeでもできますがビックリするくらい面倒くさいですので、
無難にappendChild等を使って出力するようにしてあげると良いんじゃないかなと思います。

js

1<html> 2<body> 3 <p id="sample" style="cursor:pointer">ここをクリックすると「こんにちは」と「さようなら」を表示する</p> 4 <div id="target"></div> <!--この中に追加 --> 5 <script> 6 'use strict'; 7 const _d = document, 8 _db = _d.body, 9 _target = _d.getElementById('target'), 10 _sample = _d.getElementById('sample') 11 ; 12 13 let elm; 14 15 const say = msg => { 16 elm = _d.createElement('p'); 17 elm.innerText = msg; 18 _db.appendChild(elm); //文字を #target に追加 19 } 20 21 const sayListener = () => { 22 say('こんにちは'); 23 say('さようなら'); 24 }; 25 26 _sample.addEventListener( "click", sayListener,false); //リスナ登録 27 </script> 28</body> 29</html>

MDN ドキュメントの操作

投稿2020/02/09 08:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

beginner001

2020/02/09 22:22

知らないことばかりです。勉強して分かるようになります。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問