8545


・あるサイトで下記のように書いてあったのですが、内容について教えてください

> addEventListenerで登録したイベントリスナの第一引数に、イベントオブジェクトが自動的に渡されます

**質問**  
・何のために自動的に渡されるのでしょうか？  
・試しに第一引数を利用せず「event.preventDefault()」と書いたらイベントキャンセルされたのですが…  
・下記の違いは？

・自動的に渡される引数を使用

[code]

    function hoge(evt) {
      evt.preventDefault();
    }
    
[/code]

・eventを使用

[code]

    function hoge() {
      event.preventDefault();
    }
    
[/code]


CC BY-SA 3.0
2015-03-30T00:47:51.147
8544
2015-03-30T02:17:25.140
7886
question
javascript
addEventListenerで登録したイベントリスナの第一引数に、イベントオブジェクトが自動的に渡されます


・リスナがなんのイベントを処理してるか知るためです。  
たとえば、複数の種類のイベントを1つのリスナで処理したい場合などです。inputイベントとchangeイベントで同じリスナを使いたいけどちょっとだけ処理を変えたいとか、WindowでのblurイベントとDocumentでのblurイベントでだいたい同じような処理をしたいけど、ちょっとだけ違う処理をしたいとか。evt.typeでイベントの種類、evt.targetでイベントが発火したオブジェクトを参照できます。

・引数を使わないでeventを参照する方法は非標準です  
Firefoxで動きません。IEの独自拡張で、WebKit系でもIEとの互換性のために動くようになっています。


CC BY-SA 3.0
2015-03-30T02:11:06.973
8545
2015-03-30T02:11:06.973
3475
8544
answer

[code]

    function hoge(){
        ここに処理
    }
    
    function fuga(){
        hoge(引数1);
    }
    
[/code]

この場合、fuga()で渡された「引数1」を使用したい場合にどうするでしょうか？

[code]

    function hoge(evt){
        evt.preventDefault();
    }
    
    function fuga(){
        hoge(引数1);
    }
    
[/code]

として、hoge()の受け取る引数に名前を付けてあげるか、

[code]

    function hoge(){
        argments[0].preventDefault();
    }
    
    function fuga(){
        hoge(引数1);
    }
    
[/code]

としてargmentsを使用するかのどちらかだと思います。

[code]

    function hoge() {
        event.preventDefault();
    }
    
[/code]

だと「event」は何者？ということになってしまいます。

  

  * 何のために自動的に渡されるのでしょうか？

「addEventListener」では渡されたイベントオブジェクトによって処理を分岐したいことがあるからではないでしょうか？


CC BY-SA 3.0
2015-03-30T02:17:25.140
8546
2015-03-30T02:17:25.140
8963
8544
answer