2013-08-25 5 views
9

Il mio modulo backbone.js ha un singolo campo di testo (nessun pulsante di invio). Devo catturare l'evento di invio (utilizzando il tasto di invio) nella vista. Di seguito è riportato il codice di esempio. In qualche modo il metodo di invio non viene richiamato premendo Invio. Invece il modulo va per una ricarica.Catturare il modulo inviare eventi utilizzando entra nel 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> 

risposta

21

aggiungere questo alla tua vista Backbone:

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

Si noti inoltre che nel codice HTML, l'azione modulo deve essere definito.

Se non avete l'azione definita, quindi fare questo:

events: { 
    'keyup': 'processKey' 
} 

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

in realtà "chiave" - ​​no CamelCase :) –

+0

@dev_doctor grazie per la correzione. –

+0

Manca un '{' per il blocco if – blackmind

3

Se hai problemi a catturare sostengono gli eventi in modo che la vostra proprietà 'el' è definito nella vista.

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