Foros del Web » Programando para Internet » Jquery »

Implementación de formToWizard de JQuery en formulario dinámico

Estas en el tema de Implementación de formToWizard de JQuery en formulario dinámico en el foro de Jquery en Foros del Web. Hola Así es. Estoy usando el plugin para JQuery, formToWizard , el cual divide los formularios en secciones de acuerdo a los fieldset existentes, mostrando ...
  #1 (permalink)  
Antiguo 28/05/2010, 01:36
Avatar de Gguer  
Fecha de Ingreso: abril-2009
Mensajes: 125
Antigüedad: 15 años, 7 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.
  #2 (permalink)  
Antiguo 28/05/2010, 08:55
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Implementación de formToWizard de JQuery en formulario dinámico

Primero, decir que esto y esto son equivalentes:

(function($) {})

$(document).ready(function(){})

Es decir, podes mezclar todo el codigo en uno solo de esos contenedores (similares a window.onLoad)

Segundo, no entendí por que ponías dos veces esto:
$("#formNuevoJugador").formToWizard({ submitButton: 'guardarJugador' })

Pero si de verdad necesitas llamarlo dos veces... por que no encapsularlo en una función?

Mi respuesta es generica, pero es que es mucho para mi. Hay alguna pregunta puntual que pueda responderte?
  #3 (permalink)  
Antiguo 28/05/2010, 09:04
Avatar de Gguer  
Fecha de Ingreso: abril-2009
Mensajes: 125
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Implementación de formToWizard de JQuery en formulario dinámico

Hola. Te agradezco tu respuesta.

La primera vez que llamo a la función es para que al incio se generen las divisiones de mi formulario cuando se ejecuta la página. La segunda vez la llamo cuando creo otro grupo de campos envueltos con fieldset, y la ejecuto porque quiero que el nombre de las secciones se actualice y también agregue el nuevo fieldset en esa divisiòn.

La cuestiòn que me ocupa es que quiero agregar el nuevo fieldset a ese grupo pero no tengo claro còmo, o sea, llamar a la funciòn que divide a los fieldset pero no sè còmo saber si ya se està mostrando para que sòlo genere la nueva secciòn y no también los botones de anterior y siguiente

No sè si con todo esto me haya explicado, creo que està un poco revuelto.
Agradezco su ayuda.
Saludos
  #4 (permalink)  
Antiguo 28/05/2010, 18:22
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Implementación de formToWizard de JQuery en formulario dinámico

Podes elegir un elemento y aplicarle .size() o .length() para saber si es mayor que 0. Es decir, para saber si existe.

if ( $("#elemento").size() > 0 ) { // seguimos adelante

} else {}
  #5 (permalink)  
Antiguo 28/05/2010, 21:33
Avatar de Gguer  
Fecha de Ingreso: abril-2009
Mensajes: 125
Antigüedad: 15 años, 7 meses
Puntos: 1
Respuesta: Implementación de formToWizard de JQuery en formulario dinámico

Pues te cuento que ya me metí más con JQuery. Ya ví que sí se pueden crear elementos con DOM y JQuery; y para variar, está bastante fácil.

Para el caso que ahora tengo, yo creo que habría que eliminar lo que la función creó previamente y cargarlo de nuevo. Pensando en el ejemplo que me comentas, creo que seguiría en lo mismo, porque si existe de cualquier manera tendría que ejecutarla y generaría otra vez cada elemento, en lugar de borrarlo y crearlo de nuevo. Exacto, creo que eso es lo que necesito, borrar y recrear.

Qué opinan? Eso podría ser una solución? La cosa es cómo!
Saludos
  #6 (permalink)  
Antiguo 30/05/2010, 10:44
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Implementación de formToWizard de JQuery en formulario dinámico

.remove() quita elementos específicos

.html() reemplaza el contenido existente.

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:42.