Formulario y javascript

S

Buenas tengo un formulario con dos botones: uno de tipo submit y otro para realizar otra función(en este caso generarme un pdf, pero es lo de menos). La cuestión es que cuando pulso el submit me redirige donde indica mi action, y lo que quiero es que cuando pulse el otro botón me redirija a otro sitio pero con las variables de ese formulario.

<form id="buscainstanciadispositivo" action="{base_url()}dispositivo_controller/buscaInstanciaDispositivo" method="POST">
<label for="tipo_dispositivo">Tipo de dispositivo</label>
<select class="form-control" name="tipo_dispositivo" id="tipo_dispositivo">
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
</select>

<label for="marca">Marca</label>
<select class="form-control" name="marca" id="marca">
     <option value="1">aaa</option>
     <option value="2">bbb</option>
     <option value="3">ccc</option>
</select>

<label for="modelo">Modelo</label>
<select class="form-control" name="modelo" id="modelo">
     <option value="1">xxx</option>
     <option value="2">yyy</option>
     <option value="3">zzz</option>
</select>

<button type="submit" class="btn btn-primary">Buscar</button>
<a href="{base_url()}pdf_controller/generar">Generar Pdf</a>
</form>

No se como hacerlo, a ver si alguien me puede echar un mano.

Cobre

con preventDefault de javascript puedes evitar el envio del formulario y hacer lo que te plaza despues, pero si no quieres enviar nunca el formulario quitale el tipo submit y ponle una accion javascript a ese boton

#3 entonces usa el preventDefault para evitar el envio del formulario

2 respuestas
S

#2 Esque quiero tener las dos opciones, el submit cuando tenga que realizar la acción de buscar y luego cuando pulse el otro botón me mande a otra pagina con las variables del formulario.

1 respuesta
S

#2 Gracias por las respuestas, pero no tengo que evitar ningún envío de formulario, simplemente que cuando pulse el botón secundario recoja las variables del formulario y las envíe a la pagina que me redirige ese botón. Creo que usar preventDefault ahí no me sirve de nada. (El problema es que no se como recoger esas variables vía javascript y enviarlas).

grivcon

#1 No entiendo muy bien que quieres hacer pero yo cuando hice mi primer juego en Ajax lo que use fue campos ocultos que guardaban en su contenido información y luego con un simple document.getelement accedía a su contenido y lo guardaba en una variable, luego ya con esa info hacía lo que quería. Busca en google:

<input type="hidden">
1 respuesta
S

#5 Buenas, realmente no quiero ocultar información, simplemente recoger las variables del formulario y en vez de enviarlas a mi dispositivo_controller/buscaInstanciaDispositivo (que es donde voy si pulso el boton del submit), enviarlas a otro sitio, (pdf_controller/generar). Estoy googleando a ver si encuentro información sip

taltal

No se si una opción podría ser pasarlo por GET, aunque la url no quedará limpia:

<a href="{base_url()}pdf_controller/generar?t=$POST['tipo_dispositivo']&m=$POST['marca']&mod=$_POST['modelo']">Generar Pdf</a>

Luego en el generador de pdf defines las variables que te envías por GET y las colocas en cada sitio del pdf.

1 respuesta
S

#7 Quiero enviarlas por POST

1 respuesta
grivcon

#8 d = document.getElementById("marca").value para recoger la información? y luego el generador de pdf no se como lo tendrán pero supongo que estas recibiendo información de alguna forma, ya teniendo la variable...

Merkury

Y porque no usas .post() en el botón de generar el PDF.

En la función del post pasas todos los campos a variables de jscript y luego lo lanzas contra el servidor y en el callback te devuelves lo que quieras (la descarga, un mensaje, etc).

#11 No es que sea la más factible, es que es la única XD.

1 respuesta
S

#10 Esta opción es la mas factible y es la que estoy mirando. :)

1 respuesta
Cobre

Me sonaba de usarlo, en jquery, lo he cambiado para que se adapte a tu ejemplo, no se si funciona ahora mismo este codigo pero seria algo asi:

jQuery('#buscainstanciadispositivo' ).submit(function(e){
e.preventDefault();
var formulario = jQuery(this);
formulario.attr('action' ) = "otra url";
jQuery(formulario).submit();
});

1 respuesta
Merkury

#12 Si haces .submit() mandas el form al action definido.

Tiene que usar .post() porque el quiere que los datos del formulario vayan a un script diferente.

También hay una forma más rustica y es que en el form poner un checkbox y un solo submit y que en el script que recoge el envío comprobar ese checkbox y en función de si esta marcado o no, genere el PDF o realice lo que tenga que realizar.

1 respuesta
S

#13 Exacto!

Cobre

Pense que queria enviar el formulario a otro sitio pero de todas maneras aun te sirve:

jQuery('#buscainstanciadispositivo' ).submit(function(e){
    e.preventDefault();
    hacerOtraCosa();
});
1 respuesta
Merkury

#15 Una cosa hacer submit y meterle un e.preventDefault() tampoco tiene sentido teniendo la función .post() XD.

Cobre

Leyendolo otra vez, la verdad que aun no se que quiere, xD

si solo tiene 2 botones y uno es para enviar a otro sitio pq no cambia el action ? xd

1 respuesta
S

#17 Ambos botones van a re-dirigirme a algún script, por lo que necesito ambos.

Cobre

entonces no uses type submit sino un boton normal no ?

1 respuesta
S

#19 es otra opción pero tengo que usar lo que estoy buscando para ambos botones :P

elkaoD

Si no quieres usar AJAX (que es lo que creo haber entendido), mediante JS cambia la URL del action y ahí haz submit (que se hará sobre la nueva URL).

Si lo que quieres es con AJAX, .post() y punto.

1 respuesta
S

#21 Esta opción me parece interesante, voy a indagar como hacerlo. ;)

S

Ya he conseguido lo que buscaba, pongo la solución por si le sirve a alguien, gracias a todos por la ayuda. La solución de elkaoD es la que he optado.

&lt;form id=&quot;buscainstanciadispositivo&quot; name=&quot;myform&quot; onsubmit=&quot;return OnSubmitForm();&quot; method=&quot;POST&quot;&gt;

//Variables del formulario......

//botones que me redirigen a ambas url's
&lt;input type=&quot;submit&quot; class=&quot;btn btn-primary&quot; name=&quot;operation&quot; onclick=&quot;document.pressed=this.value&quot; value=&quot;buscar&quot;/&gt;
							&lt;input type=&quot;submit&quot; class=&quot;btn btn-default&quot; name=&quot;operation&quot; onclick=&quot;document.pressed=this.value&quot; value=&quot;generar&quot;/&gt;

&lt;/form&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function OnSubmitForm()
{
  if(document.pressed == 'buscar')
  {
   document.myform.action =&quot;buscaInstanciaDispositivo&quot;;
  }
  else
  if(document.pressed == 'generar')
  {
    document.myform.action =&quot;GeneraPdfInstanciaDispositivo&quot;;
  }
  return true;
}
&lt;/script&gt;

Usuarios habituales