2016-05-02 13 views
1

JavaScriptをmodule patternとして構造化して以来、クリックイベントの一部が機能しなくなりました。私のJavaScriptの他の部分はHTMLにDOMを追加するので、ボタンには$('body').on('click')を使う必要があります。最初のクリックイベントが動作しているJavaScriptモジュールでクリックイベントをバインドする

var s, 
MyApp = {  

    settings: { 
    fooButton: $(".foo-button"), 
    barButton: $(".bar-button") 
    },  

    init: function() { 
    s = this.settings; 
    this.bindEvents(); 
    },  

    bindEvents: function() { 
    // this works 
    s.fooButton.on("click", function() { 
     MyApp.clickButton("foo"); 
    });  

    // this does NOT work 
    $('body').on('click', s.barButton, function (event) { 
     MyApp.clickButton("bar"); 
    }); 
    },  

    clickButton: function(button) { 
    console.log("You clicked " + button) 
    }  

}; 

、第二ではありません。

これは私のモジュールは、現在のように見えるものです。 JavaScriptコードで作成された要素のバインドとイベントはどうすればできますか?

+0

試し '$( '体')。上()、s.barButton.attr( "ID" 'クリック'、機能(イベント){...'代わりに。 –

+0

あなたが持っているので、作成されたオブジェクト(つまり、s.fooButtonやs.barButton)への参照は '$( 'body')。on( 'click'、 'selector'、...)'を使う必要はありません。単純に 's.fooButton.on(" click "、function ...' – James

答えて

0

JSで要素を作成する場合は、要素が作成された後にイベントをバインドする必要があります。

したがって、関数内にバインディングイベントを配置し、JSコードが要素を作成した後にその関数を呼び出します。 :)

0

イベントが委任されたときのハンドラの2番目の引数は、文字列となるはずです。

jQueryオブジェクトです。 これは、クリックイベントが機能していない根本的な原因です。

変更

barButton: $(".bar-button") 

イベント委任に対して.on()を使用している場合

barButton: ".bar-button" 
関連する問題