2010-12-16 10 views
5

Tengo un formulario que permite duplicar un conjunto de campos de formulario (consulte aquí: http://jsfiddle.net/Sd9Ag/8/). ¿Cómo aumentaría el número de matriz en el atributo de nombre cuando las entradas están duplicadas?Incrementar matriz multidimensional cuando se clonan campos de formulario

Por ejemplo:

<input type="input" name="question[1]" /> 
<input type="input" name="questionURL[1]" /> 
<input type="input" name="answer[1][]" /> 
<input type="input" name="answerURL[1][]" /> 

Y cuando se clona, ​​incrementar el número de serie:

<input type="input" name="question[2]" /> 
<input type="input" name="questionURL[2]" /> 
<input type="input" name="answer[2][]" /> 
<input type="input" name="answerURL[2][]" /> 

La razón por la que necesito hacer esto es por lo que las preguntas y respuestas se agrupan cuando el formulario es enviado.

+0

¿Por qué no es 'pregunta [1] []' 'simplemente cuestión [1] '. Parece que los únicos elementos que se repiten son las respuestas. – Stephen

+0

Hola Stephen, buen punto. Actualizaré la pregunta para corregir este error evidente. – superUntitled

+0

¿Por qué necesita usar los números en vez de sólo la pregunta [], la respuesta [], etc.? –

Respuesta

5

actualización

Ok, he utilizado el jsFiddle (la que me perdí en mi primera respuesta) código e hizo algunas modificaciones.

  • la nota de la cuestión Retitulé a qnote[1] para evitar la confusión con la respuesta señala
  • respuestas se nombran como answer[1][1] para la primera respuesta a la primera pregunta, answer[1][2] para la segunda respuesta a la primera pregunta ... answer[2][1] para la primera respuesta de la segunda pregunta, etc ..

código de trabajo en http://jsfiddle.net/dcUdU/1/


respuesta original

Utilice el siguiente código

elem.name = elem.name.replace(/\[(\d+)\]/,function(str,p1){ 
     return '[' + (parseInt(p1,10)+1) + ']'; 
     }); 

para each de los elementos de entrada que ha clonado (que necesita para clone del último grupo de campos)

Utiliza una expresión regular para encontrar el número dentro de [ y ] y aumentarlo en uno.

ejemplo enhttp://www.jsfiddle.net/gaby/WZAU6/

referencia para function as parameter to the replace method

+0

Gracias Gaby, Esto no funciona con mi ejemplo jsFiddle, ya que clona más de una entrada de respuesta. – superUntitled

+0

@superUntitled, respuesta actualizada. –

+0

Perfecto, gracias. ¡Ahora tengo que estudiar esta belleza para descubrir qué está pasando! ¡Gracias, me diste un nuevo conjunto de funciones para aprender! – superUntitled

1

Tener un vistazo a esto: http://jsfiddle.net/sje397/z3SSL/1/

El principal cambio es la siguiente:

var emptyQ = $("li.question").clone(), 
    emptyA = $("li.answer").clone(); 

emptyQ.html(emptyQ.html() 
       .replace("question[" + (nextId - 1), "question[" + nextId) 
       .replace("qnotes[" + (nextId - 1), "qnotes[" + nextId)); 
emptyA.html(emptyA.html() 
       .replace("answer[" + (nextId - 1), "answer[" + nextId) 
       .replace("anotes[" + (nextId - 1), "anotes[" + nextId)); 
+0

gracias por la ayuda! ¡el ejemplo que proporcionaste no está funcionando!los conjuntos de entrada de formulario ya no se están duplicando correctamente. – superUntitled

+0

@superUntitled: He actualizado mi respuesta. – sje397

+0

esto parece funcionar mejor, sin embargo, si se clona más de una pregunta, el número siempre es 2. ¿Hay alguna manera de almacenar el índice? ¡Uf! este es un maestro mental! – superUntitled

Cuestiones relacionadas