2012-03-05 15 views
23

estoy usando Ruby on Rails 3 y me gustaría desactivar y toogle la clase CSS de un form.submitcuando la forma es AJAX presentada y hasta que la solicitud HTTP AJAX se completa (estoy usando el valor por defecto jQuery marco para JavaScript).Cómo deshabilitar un botón de envío de formulario "a là Ruby on Rails Way"?

Mi forma es la siguiente:

<%= form_for(@article, :remote => true) do |form| %> 
    ... 
    <%= form.submit(nil, {:id => 'button_id', :class => 'button_class'}) %> 
<% end %> 

¿Cómo puedo hacer que en un/"buena" forma "común"/"correcta"?

Respuesta

42

El código del puente jQuery de Rails (jquery_ujs.js) en realidad tiene un ayudante para esto.

<%= form.submit "Save", id: "button_id", class: "button", disable_with: "Submitting..." 

Reemplazará el texto del botón con el valor que proporcione.

Ver http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag

cambio de API: como Renan sugiere en un comentario a continuación, a partir de Rails 4 beta hay un aviso de desaprobación en la opción disable_with. Debe ser cambiado a ser un atributo de datos:

<%= form.submit "Save", id: "button_id", class: "button", data: {disable_with: "Submitting..."} %> 

Esto debería funcionar con todas las versiones recientes de los carriles, ya que es lo que hizo la opción de todos modos. Por lo tanto, será un aviso menos de desaprobación que reparar cuando actualice a Rails 4. :)

+0

Entonces, ¿no hay un puente jQuery para 'form.submit' pero solo para' submit_tag'? – user502052

+0

El método 'submit' de' FormBuilder' llama a 'submit_tag' con las opciones transferidas. –

+5

La opción 'disable_with' quedó obsoleta a partir de los carriles 3.2.5. Ahora usa ': data => {: disable_with => 'Submitting ...'}'. Fuente: http://apidock.com/rails/ActionView/Helpers/FormTagHelper/submit_tag#1305--disable-with-is-deprecated – Renan