Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/05/2010, 01:36
Avatar de Gguer
Gguer
 
Fecha de Ingreso: abril-2009
Mensajes: 125
Antigüedad: 15 años, 8 meses
Puntos: 1
Implementación de formToWizard de JQuery en formulario dinámico

Hola

Así es. Estoy usando el plugin para JQuery, formToWizard, el cual divide los formularios en secciones de acuerdo a los fieldset existentes, mostrando una sección a la vez, con el fin de hacerle al usuario la navegación más cómoda.

Con la funcionalidad de este plugin no tengo problemas, todo va como debería. La cuestión es que mi formulario no tendrá secciones fijas, sino que a partir de las que ya tiene definidas el usuario podrá agregar más secciones. Esto es porque se realizan registros de jugadores y he querido que cada uno sea por separado. Al principio tendrá que registrar 5, como mínimo, pero puede extenderse hasta 10 máximo.

le doy la posibilidad al usuario de crear el nuevo grupo fieldset con los campos correspondientes. Esto lo hago con DOM (no sé si se pueda con JQuery, soy muuuy nuevo con este framework), pero cuando quiero llamar a la función que genera que el formulario se divida, efectivamente carga la nueva sección, pero hace un registro repetido, es decir, muestra las secciones dos veces.

Dos imágenes para aclarar esto:

Esta es la vista inicial, antes de hacer un nuevo registro


Aquí es cuando falla, porque los titulos de las secciones se crean dos veces


El código con el que llamo a esta función es el siguiente:
Código Javascript:
Ver original
  1. //Esto es al inicio del archivo que contiene el código de esta función
  2. $(document).ready(function(){
  3.     $("#formNuevoJugador").formToWizard({ submitButton: 'guardarJugador' })
  4.  
  5. //Esto siguiente lo coloco al final de la función que genera el nuevo fieldset
  6.  $("#formNuevoJugador").formToWizard({ submitButton: 'guardarJugador' })
  7. });

Para ser sincero no conozco la sintaxis muy bien de JQuery, por lo que no sé cómo hacer para que únicamente cargue los fieldset añadidos, no todo el contenido del form por segunda vez.

Este es el código del plugin
Código Javascript:
Ver original
  1. /* Created by jankoatwarpspeed.com */
  2.  
  3. $(document).ready(function(){
  4.     $("#formNuevoJugador").formToWizard({ submitButton: 'guardarJugador' })
  5. });
  6. (function($) {
  7.     $.fn.formToWizard = function(options) {
  8.         options = $.extend({  
  9.             submitButton: ""
  10.         }, options);
  11.        
  12.         var element = this;
  13.  
  14.         var secciones = $(element).find("fieldset");
  15.         var count = secciones.size();
  16.         var submmitButtonName = "#" + options.submitButton;
  17.         $(submmitButtonName).hide();
  18.  
  19.         // 2
  20.         $(element).before("<ul id='secciones'></ul>");
  21.  
  22.         secciones.each(function(i) {
  23.             $(this).wrap("<div id='step" + i + "'></div>");
  24.             $(this).append("<p id='step" + i + "commands'></p>");
  25.  
  26.             // 2
  27.             var name = $(this).find("legend").html();
  28.             $("#secciones").append("<li id='tituloSeccion" + i + "'>" + (i + 1) + "<span>" + name + "</span></li>");
  29.  
  30.             if (i == 0) {
  31.                 createNextButton(i);
  32.                 selectStep(i);
  33.             }
  34.             else if (i == count - 1) {
  35.                 $("#step" + i).hide();
  36.                 createPrevButton(i);
  37.             }
  38.             else {
  39.                 $("#step" + i).hide();
  40.                 createPrevButton(i);
  41.                 createNextButton(i);
  42.             }
  43.         });
  44.  
  45.         function createPrevButton(i) {
  46.             var stepName = "step" + i;
  47.             $("#" + stepName + "commands").append("<a href='#' id='" + stepName + "Prev' class='prev'>< Anterior</a>");
  48.  
  49.             $("#" + stepName + "Prev").bind("click", function(e) {
  50.                 $("#" + stepName).hide();
  51.                 $("#step" + (i - 1)).show();
  52.                 $(submmitButtonName).hide();
  53.                 selectStep(i - 1);
  54.             });
  55.         }
  56.  
  57.         function createNextButton(i) {
  58.             var stepName = "step" + i;
  59.             $("#" + stepName + "commands").append("<a href='#' id='" + stepName + "Next' class='next'>Siguiente ></a>");
  60.  
  61.             $("#" + stepName + "Next").bind("click", function(e) {
  62.                 $("#" + stepName).hide();
  63.                 $("#step" + (i + 1)).show();
  64.                 if (i + 2 == count)
  65.                     $(submmitButtonName).show();
  66.                 selectStep(i + 1);
  67.             });
  68.         }
  69.  
  70.         function selectStep(i) {
  71.             $("#secciones li").removeClass("current");
  72.             $("#tituloSeccion" + i).addClass("current");
  73.         }
  74.  
  75.     }
  76. })(jQuery);

Bueno espero haber sido claro y que alguien tenga alguna propuesta para esta cuestión, un saludo.