2013-08-25 2 views
9

私のbackbone.jsフォームには、単一のテキストフィールド(送信ボタンなし)があります。私は、ビューで(送信キーを使用して)サブミットイベントをキャプチャする必要があります。以下はサンプルコードです。何らかの形で、submitメソッドがenterを押すと呼び出されません。代わりに、フォームがリロードされます。バックボーンでの入力を使用したフォーム送信イベントの取得

スクリプト:

var FormView = Backbone.View.extend({ 
    el: '#form', 

    events: { 
     "submit": "submit", 
    }, 

    initialize: function() { 
     console.log("initialize"); 
    }, 

    submit: function (e) { 
     e.preventDefault(); 
     console.log("submit"); 
    } 
}); 

new FormView(); 

HTML:

<form id="form"> 
    <input type="text"/>   
</form> 

答えて

21

があなたのバックボーンビューにこれを追加します。

events: { 
    'submit form': 'submit' 
} 

また、あなたのHTMLに、フォームのアクションがなければならないことに注意してください定義された。あなたは、アクションが定義されていない場合は

、その後、次の操作を行います。

events: { 
    'keyup': 'processKey' 
} 

processKey: function(e) { 
    if(e.which === 13) // enter key 
    this.submit(); 
} 
+2

実際には「キーアップ」 - キャメルケースなし) –

+0

@dev_doctorは訂正してくれてありがとうございます。 –

+0

ifブロックに '{'がありません – blackmind

3

あなたはイベントがあなたの「エル」プロパティは、あなたのビューで定義されていることを確認提出キャプチャ問題が発生した場合。

var myView = Backbone.View.extend({ 
    el: $(body), 
    events: { 
     "submit form": "doMethod" 
    }, 
    doMethod: function(e) { 
     e.preventDefault(); 
     console.log('form fired'); 
    } 
}); 
関連する問題