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

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

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

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

Q&A

解決済

5回答

1181閲覧

JavaScript イベントハンドラについて

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2016/09/02 04:06

JavaScriptでのイベントハンドラについて、

onClick時のイベントで、下記のコードでonClickアクションはどこに指定するべきでしょうか。
また、mouseOver等のイベントもonClick時と同じ要素でよいのでしょうか。

教えていただけますと幸いです。
よろしくお願いいたします。

html

1<div onClick='handleClick'> ...① 2 <div onClick='handleClick'>テスト1</div> ...② 3 <div onClick='handleClick'>テスト1</div> ...② 4</div> 5

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

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

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

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

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

guest

回答5

0

①と②で意味が違いますが、いいんですか?
もし、①の要素が②を二つ含んでいるよりも大きい場合、等価になりません。

何をやりたいかによって、違ってくると思いますよ。

こんな感じ

投稿2016/09/02 04:18

編集2016/09/02 04:22
shi_ue

総合スコア4437

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

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

退会済みユーザー

退会済みユーザー

2016/09/02 04:24

失礼しました。 親要素のdivと子要素のdivをどちらを触っても、反応するようにしたいです。 この場合、両方にonClickをつけるものでしょうか。 下記のスタイルでお願いします。 親要素のWidth:40px, Height:40px 子要素のWidth:20px, Height:10px
退会済みユーザー

退会済みユーザー

2016/09/02 04:27

画像の添付ありがとうございます。 1,2どちらを触っても、イベントが発火するようにしたいです。
shi_ue

2016/09/02 04:49 編集

何をするかによって違うと思いますけどね・・・ ①で両方ともイベントが出ますが、失礼ながら、そんな単純な話なら質問にもならないような… やってみれば分かることですし。 ちなみに両方書くと、②のエリアでクリックされると二回 handleClick が動いてしまいます。
退会済みユーザー

退会済みユーザー

2016/09/02 05:22 編集

失礼しました。 1で親要素と子要素の両方ともイベントが発火しますが、そのあとの処理で、DOMを取得して操作したい場合、evet.targetが親要素をクリックした場合と子要素をクリックした場合で変わると思うのですが、これは毎回if文などで処理をわけるべきなのでしょうか。
退会済みユーザー

退会済みユーザー

2016/09/02 05:18 編集

例えば、下記のようなコードです。 var thisElement = event.target; if(thisElement.id != 'back_btn') { this.backAnimation(thisElement.parentNode); } else { this.backAnimation(thisElement.parentNode.parentNode); }
shi_ue

2016/09/02 05:50

だから、言ったのに・・・そのようなことは質問に追記してください。 ここで、コメントの応酬でやり取りするのは不毛です。
guest

0

ベストアンサー

JavaScript

1document.getElementById( 'root' ).addEventListener ( 'click', function( event ){ 2 event.stopPropagation(); 3 console.log( event.target.id ); 4}, false );

HTML

1<div id='root'> 2 <div id='test1'>テスト1</div> 3 <div id='test2'>テスト2</div> 4</div> 5```**動くサンプル:**[https://jsfiddle.net/bk8cmtje/](https://jsfiddle.net/bk8cmtje/)

投稿2016/09/02 16:42

kei344

総合スコア69398

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

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

0

こんな風にするとよいです

javascript

1<script> 2try{ 3document.addEventListener ('click',function(e){myfunc(e)},true); 4}catch(e){ 5document.attachEvent('onclick',function(e){myfunc(e)}); 6} 7function myfunc(e){ 8 var t = (e.srcElement || e.target); 9 if(t.nodeName=="DIV"){ 10 handleClick(t); 11 } 12} 13function handleClick(t){ 14 console.log(t.id); 15} 16</script> 17<div id="d1" style="height:100px;background-Color:lime;"> 18<div id="d2" style="height:30px;background-Color:yellow;">テスト1</div> 19<div id="d3" style="height:30px;background-Color:aqua;">テスト2</div> 20</div>

投稿2016/09/02 04:51

yambejp

総合スコア114757

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

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

0

その前にhandleClick()と括弧を入れないと動かないです

投稿2016/09/02 04:26

date

総合スコア1820

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

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

0

両方という意味では①でいいと思いますが
②の処理を分けるなら②にそれぞれ必要かと

投稿2016/09/02 04:41

hyksm

総合スコア174

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

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

退会済みユーザー

退会済みユーザー

2016/09/02 04:54

ご回答いただきありがとうございます。 ①で実装していたのですが、親子両方にイベントをつけるのか、 親要素だけでいいのか気になり、質問させていただきました。 子要素のdivがクリックされる時の場合を書くべきなのでしょうか。
退会済みユーザー

退会済みユーザー

2016/09/02 04:55

①と②は同じ処理です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問