2011-08-05 12 views
13

Tengo mi Ajax trabajando, Builtin Rails javascript, con el botón de enviar. Sin embargo, me gustaría que se envíe cuando cambie el valor del cuadro desplegable y elimine el botón. En mi investigación encontré lo que parece ser la solución correcta, pero no obtengo ninguna solicitud para el servidor. Aquí está mi código de formulario desplegable, tenga en cuenta que todavía tiene el botón de envío que trabajaba antes de agregar: onchange:Rails Tratando de enviar un formulario en el cambio de menú desplegable

<% form_tag('switch_car', :method => :put, :remote => true) do %> 
    <div class="field"> 
    <label>Car Name:</label> 
    <%= select_tag(:id, options_from_collection_for_select(active_cars, "id", "name"), 
     :onchange => ("$('switch_car').submit()"))%><%= submit_tag "Switch Car" %> 
    </div>  
<% end %> 

aquí es el código HTML generado:

<form accept-charset="UTF-8" action="switch_car" data-remote="true" method="post"> 
    <div style="margin:0;padding:0;display:inline"> 
    <input name="utf8" type="hidden" value="&#x2713;" /> 
    <input name="_method" type="hidden" value="put" /> 
    <input name="authenticity_token" type="hidden" value="PEbdqAoiik37lcoP4+v+dakpYxdpMkSm7Ub8eZpdF9I=" /> 
    </div> 
    <div class="field"> 
    <label>Car Name:</label> 
    <select id="id" name="id" onchange="$('switch_car').submit()"> 
     <option value="9">Truck</option> 
     <option value="10">Car</option> 
    </select> 
    <input name="commit" type="submit" value="Switch Car" /> 
</div> 

Gracias de antemano por cualquier ayuda.

+1

¿Qué biblioteca de JavaScript está utilizando? Su: onchange tiene código Ruby, debe ser una llamada de JavaScript. –

+0

@MauricioLinhares Estoy usando las bibliotecas que se instalan con Ruby on Rails 3. Entonces, ¿tengo que averiguar cómo enviar el formulario a través de javascript? – Xaxum

+0

Lo siento, @MauricioLinhares. Veo lo que dices. Ahora estoy tratando de hacer que los rieles lo hagan con una función remota, pero todavía no tengo suerte. Creo que esto es bastante común aunque tengo dificultades para encontrar una solución. Solo quiero enviar el formulario en select? – Xaxum

Respuesta

5

Esto es lo que pude hacer para que funcione. Llamé a la forma switch_car usando: name => "switch_car" y usé el siguiente javascript.

:onchange => ("javascript: document.switch_car.submit();") 

Todavía estoy buscando una mejor respuesta, así que actualizaré si encuentro algo. Esto no usa submit .js por alguna razón. Lo procesa como HTML a diferencia del botón de enviar, que utiliza AJAX para actualizar solo los elementos de página cambiantes. Pero esto es lo mejor que he podido encontrar hasta ahora.

5

Dependiendo de la biblioteca js que está utilizando:

Prototipo: :onchange => ("$('switch_car').submit()")

Jquery: :onchange => ("$('#switch_car').submit()")

Si está utilizando los valores por defecto y sus rieles versión está por debajo de 3,1, entonces prototipo es el valor predeterminado biblioteca.

+0

Gracias. Tengo la versión 3.0.9, así que probé la primera opción. Cuando realizo el cambio en el cuadro de selección, no se envía ninguna solicitud al servidor. Actualicé el código de arriba. ¿Alguna idea de dónde podría haber ido mal? – Xaxum

+0

todavía no hubo suerte con esto. ¿No puede entender por qué no envía una solicitud al servidor? – Xaxum

+0

instala firebug (complemento de Firefox) para depurar e intenta ejecutar el javascript manualmente en la consola de Firebug para ver si funciona o cuál es el problema. –

2

Una solución más general usando jQuery (que no necesito saber el nombre de la forma) es:

onchange: "$(this).parent('form').submit();" 
15

reemplazar su onchange con esto,

onchange: "this.form.submit();" 
1

Para una select_tag, sólo tiene que añadir:

{:onchange => "myHandler();" } 

donde su manejador será:

this.form.submit(); 

Además, si onchange no funciona es posible que desee probar onChage con un capital C.

Por último, asegúrese de no confundir un select_tag con una forma de selección.

Véase mi respuesta a una pregunta similar, sólo con respecto a una forma de seleccionar

Adding An Onchange Event To A Form Select

+1

Lo sentimos, pero estás arruinando 'select' con' select_tag'. La firma de 'select_tag' está aquí: http://apidock.com/rails/v4.1.8/ActionView/Helpers/FormTagHelper/select_tag y solo hay ** un ** parámetro de opciones. Su ejemplo de código está produciendo un error. –

+0

Gracias Martin, tienes razón, haré una distinción entre los dos. – AmitF

2

Esto parece haber existido desde hace un tiempo, pero, voy a publicar mis resultados de todas formas ya que no he encontrado esta explicación en cualquier lugar todavía.

me encontré con este article que describe bastante bien lo que es el problema cuando se dispara una petición ajax a través del método de submit() (con o sin jQuery o Handler). El autor luego recomienda formar su propia solicitud de AJAX.Eso no es necesario y no debe hacerse para hacer uso de la lógica dentro de rails.js (jquery-jus gem).

Ocurren problemas con la activación submit() manualmente debido a que rails.js se une y escucha un evento con el espacio de nombre submit.rails. Para activar manualmente un envío, utilice

onchange: 'javascript: $(this).trigger("submit.rails") 

en el elemento o en el formulario.

Cuestiones relacionadas