2012-07-25 10 views
11

que estoy tratando de enviar un formulario utilizando link_to de la siguiente manera:Envíe el formulario utilizando link_to en los carriles

<%= form_for(@post, :url=> '/post/action', :method=> 'post', :html => {:id=>'form_id'}) do |f| %> 
    .... 

<%= link_to 'submit', "/post/action", :onclick=>"document.getElementById('form_id').submit()" %> 

    .... 

pero no es la publicación de la forma, es simplemente volviendo a dirigir mi formulario a la URL especificada. ¿Alguien sabe como hacer esto?

Respuesta

23

Se puede utilizar:

<%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %> 

si está utilizando jQuery y una versión posterior de los carriles.

anterior funcionará, pero si usted tiene una página muy larga que se vaya a la parte superior de la página debido a la "#" por lo que si se quiere evitar que se pueden hacer:

<%= link_to 'submit', "", :onclick => "$('#form_id').submit()" %> 
7

Creo que ambas cosas suceden. El navegador comienza a enviar el formulario, pero también sigue el enlace href. Puede solucionarlo vinculando a # en lugar de /post/action ...

... sin embargo, no recomiendo hacerlo. Hay algunos enfoques mejores:

Primero, puede usar un botón en lugar de un enlace. Tendrás que darle un estilo para que parezca un enlace, pero eso no debería ser un problema. Será mejor, porque no romperá el Principio de la Sorpresa Mínima (las personas que leen el código esperan que los formularios se envíen con los botones) y no necesitará el JavaScript.

Si insiste en usar un enlace, al menos debe mover el código JavaScript de la vista a un archivo JavaScript. Luego, agregue este comportamiento discretamente (aunque no tendrá una buena alternativa con el enlace). Suponiendo que está usando jQuery, debe ser tan simple como:

$(document).on('click', '[data-submit-form]', function(e) { 
    e.preventDefault(); 
    $(this).closest('form').submit() 
} 
Cuestiones relacionadas