JavaScript でイベント伝播の止め方いろいろ
JavaScript でイベント伝播の止め方いろいろ
- event.preeventDefault()
- event.stopPropagation()
- jQuery.bind("…", function(){reutnr false;})
等の細かい挙動を確認.
結果
jQuery.bind
parent | link | bind2 | |
---|---|---|---|
指定なし | ○ | ○ | ○ |
e.preventDefault() | ○ | × | ○ |
e.stopPropagation() | × | ○ | ○ |
return false; | × | × | ○ |
element.onclick
parent | link | |
---|---|---|
指定なし | ○ | ○ |
e.preventDefault() | ○ | × |
e.stopPropagation() | × | ○ |
return false; | ○ | × |
まとめ
- preeventDefault() はブラウザのデフォルトの挙動をキャンセルする.
- stopPropgation() は親要素へのイベント伝播を止める.
- return false; の挙動は jQuery と onclick で変わるので注意
- jQueryで、同じ要素に複数のリスナを bind した場合は、両方動く
( 止めたかったら独自のフラグを持たせるか、unbind する )
深く考えない時は、jQuery + return false; だけで書いておけば良さそうでしょうか?
検証コード
※ 検証時は、コメントアウトしながら切り替えてます。