2013-08-25 15 views
9

Mój formularz backbone.js ma pojedyncze pole tekstowe (brak przycisku przesyłania). Muszę przechwycić zdarzenie submit (używając klawisza Enter) w widoku. Poniżej znajduje się przykładowy kod. W jakiś sposób metoda submit nie jest wywoływana po naciśnięciu klawisza Enter. Zamiast tego formularz służy do przeładowania.Przechwytywanie formularzy zgłaszanie zdarzeń za pomocą wpisu w szkielecie

Scenariusz:

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> 

Odpowiedz

21

Dodaj do tego widoku Backbone:

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

Należy również pamiętać, że w kodzie HTML, akcja postać musi być określone.

Jeśli nie mają działanie zdefiniowane, to zrobić:

events: { 
    'keyup': 'processKey' 
} 

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

to tak naprawdę "keyup" - bez CamelCase :) –

+0

@dev_doctor dzięki za poprawkę. –

+0

Brakuje "{" dla bloku if – blackmind

3

Jeśli masz problemy z przechwytywania przedstawić wydarzenia upewnić się, że właściwość „EL” jest zdefiniowany w widoku.

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