2013-08-25 3 views
9

Mein backbone.js-Formular hat ein einzelnes Textfeld (keine Übermittlungsschaltfläche). Ich muss das Ereignis absenden (mit der Eingabetaste) in der Ansicht erfassen. Unten ist der Beispielcode. Irgendwie wird die Methode submit beim Drücken von Enter nicht aufgerufen. Stattdessen dient das Formular zum Nachladen.Erfassen von Formularübermittlungsereignissen mithilfe der Eingabe im Backbone

Script:

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> 

Antwort

21

Fügen Sie diese auf Ihre Backbone Ansicht:

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

Beachten Sie auch, dass in Ihrem HTML, das Formular Aktion muss sein definiert.

Wenn Sie nicht die Aktion definiert, dann tun:

events: { 
    'keyup': 'processKey' 
} 

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

es ist eigentlich 'keyup' - kein CamelCase :) –

+0

@dev_doctor danke für die Korrektur. –

+0

Sie verpassen ein '{' für den if-Block – blackmind

3

Wenn Sie Probleme bei der Erfassung einreichen Ereignisse sicherzustellen, dass Ihre ‚el‘ Eigentum Ihrer Ansicht definiert ist.

var myView = Backbone.View.extend({ 
    el: $(body), 
    events: { 
     "submit form": "doMethod" 
    }, 
    doMethod: function(e) { 
     e.preventDefault(); 
     console.log('form fired'); 
    } 
}); 
Verwandte Themen