2010-03-27 20 views
171

Usando jQuery's 'submit' - ¿hay alguna forma de pasar parámetros adicionales a un formulario? No estoy buscando hacer esto con Ajax: esta es la presentación normal y típica de actualización.jQuery - agregue parámetros adicionales en submit (NO ajax)

$('#submit').click(function() { 
    $('#event').submit(function() { 
     data: { 
     form['attendees'] = $('#attendance').sortable('toArray').toString(); 
    }); 
}); 
+0

Qué tecnología del lado del servidor se utiliza? – Enrique

+0

ASP.NET MVC con C#. – Ciel

+0

Ver mi respuesta [aquí] [1], que se agrega a un formulario serializado antes de enviar. [1]: http://stackoverflow.com/questions/17809056/how-to-add-additional-fields-to-form-before-submit –

Respuesta

301

Éste lo hizo por mí:

var input = $("<input>") 
       .attr("type", "hidden") 
       .attr("name", "mydata").val("bla"); 
$('#form1').append($(input)); 

se basa en la respuesta de la Daff, pero agregó que el atributo NAME a dejar que se muestran en la colección forma y cambia el valor a VAL También verifiqué el ID del FORMULARIO (formulario1 en mi caso)

usé el Firebug Firefox para verificar si el elemento fue insertado.

Los elementos ocultos se vuelven a publicar en la colección de formularios, solo se descartan los campos de solo lectura.

Michel

+40

¿Cómo canto 'usted es mi sol' en binario? Muchas gracias. Esto resuelve muchas cosas. – Ciel

+3

Bueno, se me olvidó el atributo de nombre ... – Daff

+34

Puede mejorar ligeramente la legibilidad: var input = $ ("", {type: "hidden", name: "mydata", value: "bla"}); $ ('# form1'). append ($ (input)); – Kote

24

En su caso, debería bastar con agregar otro campo oculto a su formulario de forma dinámica.

var input = $("<input>").attr("type", "hidden").val("Bla"); 
$('#form').append($(input)); 
+0

Los datos que necesito enviar no son aptos para formularios. Tiene que ser capturado y manejado en el lado del servidor. – Ciel

+0

¿Qué quiere decir con "no apto para la forma"? –

+0

Lo siento, esto no funcionó en absoluto. Incluso con solo datos forzados, no se inyecta en el formulario. – Ciel

9

que no es necesario para unirse al evento presentará en el clic del botón de enviar simplemente enlazar el evento presentará y será capturar el evento sin importar lo que se desencadena en Enviar.

Piensa que lo que quieres es enviar el ordenable como lo harías a través de ajax. Trate de hacer algo como esto:

var form = $('#event').submit(function() { 
    $.each($('#attendance').sortable('toArray'),function(i, value){ 
     $("<input>").attr({ 
      'type':'hidden', 
      'name':'attendace['+i+']' 
     }).val(value).appendTo(form); 
    }); 
}); 
+0

aún no se muestra en el lado del servidor formcollection ... ¿hay algo especial que tengo que hacer para que aparezca un campo oculto en un servidor? Está pasando por C#/ASP.NET MVC utilizando un objeto FormCollection. – Ciel

+0

Actualizado mi respuesta, creo que entiendo lo que está tratando de hacer. – PetersenDidIt

+0

¿Está agregando un atributo 'name' a la entrada de formulario oculto generado? Según http://stackoverflow.com/questions/504681/formcollection-empty-on-form-post-in-asp-net-mvc, parece que los objetos FormCollection requieren todos los elementos '' para tener nombres. – npdoty

13

Incluso puede usar este. funcionó bien para mí

$("#registerform").attr("action", "register.php?btnsubmit=Save") 
$('#registerform').submit(); 

esto enviará btnsubmit = Guardar como valor GET para el formulario register.php.

10

Se podría escribir una función de jQuery, que permite que usted agregue campos ocultos en un formulario:

// This must be applied to a form (or an object inside a form). 
jQuery.fn.addHidden = function (name, value) { 
    return this.each(function() { 
     var input = $("<input>").attr("type", "hidden").attr("name", name).val(value); 
     $(this).append($(input)); 
    }); 
}; 

y luego agregar el campo oculto antes de enviar:

var frm = $("#form").addHidden('SaveAndReturn', 'Save and Return') 
        .submit(); 
+1

Consulte http://stackoverflow.com/questions/2601223/jquery-add-hidden-element-to-form-programmatically/16215385#16215385 para obtener una versión más avanzada de addHidden – Jonathan

+1

Me gusta la simplicidad de esta solución. No maneja muchos casos pero maneja muy bien el caso. – Phil

2

respuesta similar, pero solo quería que estuviera disponible para una prueba fácil/rápida.

var input = $("<input>") 
 
       .attr("name", "mydata").val("go Rafa!"); 
 

 
$('#easy_test').append(input);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script> 
 

 

 

 
<form id="easy_test"> 
 
    
 
</form>

Cuestiones relacionadas