2012-04-23 18 views
5

De acuerdo con la documentación (knockoutjs.com/documentation/submit-binding.html), el enlace de envío de knockoutjs tiene la ventaja de que captura maneras alternativas de enviar el formulario, como presionar la tecla enter mientras se escribe en un cuadro de texto. Tengo una cuadrícula en mi formulario y algunos usuarios están tratando de usar la tecla enter para pasar de un campo al siguiente. ¿Hay alguna forma de evitar enviar el formulario cuando esto suceda?¿Hay alguna forma de evitar que el enlace de envío de knockoutjs envíe el formulario al presionar la tecla enter?

Respuesta

8

Una opción es agregar un controlador keypress en el formulario que absorbe la tecla Intro. Que se vería así:

<form data-bind="event: { keypress: absorbEnter }, submit: test"> 
    <div data-bind="absorbEnter: true"> 
    <input data-bind="value: name"> 
    <input type="submit" value="Go" /> 
    </div> 
</form> 

JS:

var viewModel = { 
    name: ko.observable("test"), 
    absorbEnter: function(data, event) { 
     return event.keyCode !== 13; 
    }, 
    test: function() { 
     console.log("submitting", arguments);   
    } 
}; 
ko.applyBindings(viewModel); 

Muestra aquí: http://jsfiddle.net/rniemeyer/FvZXj/2/

+0

Sí Ryan, que trabajó absolutamente !! Gracias. – jgarza

+0

Podría incluso agregarlo a un bindingHandler para eliminarlo de su modelo de vista como: http://jsfiddle.net/rniemeyer/FvZXj/3/ –

+0

¿Puede KO diferenciar entre tecla arriba y tecla abajo? – FutuToad

Cuestiones relacionadas