2010-11-23 13 views
6

Quiero agregar/eliminar formas dinámicamente. Estoy usando formularios que están almacenados en una tabla, cada fila tiene forma. Tengo 2 tablas: - la que se muestra - la que está rodeada por la fila temporal que quiero clonar e insertar en la tabla mostrada.jQuery clone() Error de FireFox: no se puede enviar un formulario clonado

Todo funciona bien en IE pero la fila clonada con su forma en Firefox no se puede enviar. Si no clono la fila, solo la inserto, puedo enviar el formulario, pero necesito poder reutilizar esa fila para insertarla nuevamente, así que necesito usar la clonación. El código HTML generado con y sin clonación tiene el mismo aspecto en Firebug. ¿Cómo puedo superar este problema?

Código utilizado para la clonación y la inserción de fila: $('#tempRow').clone().insertAfter($('#templatesTable tr:last'));

+0

¿Cómo es tu marcado? –

Respuesta

6

No se puede clonar de forma fiable algo con un atributo ID y volver a insertarlo en el DOM. Esto crea un documento HTML no válido, porque tiene dos elementos con la misma ID. Firefox se está comportando correctamente.

Lo que debes hacer es clonar el formulario y luego cambiar TODAS las ID a algo único (la forma y todas sus entradas y elementos secundarios). Entonces podrás enviar el formulario.

Parece que está clonando un elemento tr y lo está insertando en una tabla? Si el elemento tr es el único que tiene un ID, esto va a funcionar:

$('#tempRow') 
    .clone() 
    .attr('id', 'tempRow-new') 
    .insertAfter($('#templatesTable tr:last')); 

Recuerde, sin embargo, que si el elemento del formulario – o cualquiera de sus hijos, incluyendo div, frameset, input, etc. – tiene una ID, deberá eliminar esa identificación o cambiarla. De lo contrario, todavía tendrá un documento no válido y aún puede tener problemas.

Además

El fragmento de código anterior no es reutilizable. Tan pronto como intente clonar el formulario por segunda vez, tendrá dos elementos con el id tempRow-new. Si necesita clonar la fila varias veces, deberá agregar un número creciente o un UUID de algún tipo para asegurarse de que todos los elementos clonados sean únicos.

+0

Sí, parece que está solucionando el problema en Firefox. Sin embargo, tengo un error en IE al hacer: var cloned = $ ('# tempRow'). Clone(). Attr ("id", "tr" + trLastId); $ ('forma', clonado) .attr ("id", "form" + trLastId); La última línea muestra el error 'El objeto no admite esta propiedad o método'. Estoy usando jquery 1.3.2. – qba

+0

es extraño ... tu código se ve bien. En Firebug, puede hacer esto: 'console.debug ($ ('form', cloned) .length);' – Stephen

Cuestiones relacionadas