Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: gAb1 en 21 Mayo 2015, 13:41 pm



Título: [Resuelto] jquery create checkbox con slider
Publicado por: gAb1 en 21 Mayo 2015, 13:41 pm
Hola buenas!

Estoy creando un formulario un poco complejo y necesito que al cambiar el value de un slider aparezcan checkbox segun el numero del value.

Código
  1. $("#slider").slider({
  2. min: 1,
  3. max: 100,
  4. value: 1,
  5. slide: function( event, ui ) {
  6. $( "#result" ).html( ui.value );
  7. }
  8. });
  9.  
Código
  1. <div id="slider" class="slider"></div><br>
  2. Cantidad: <span id="result">1</span>

Código
  1. <div data-role="fieldcontain" style="display:none;">
  2. <fieldset data-role="controlgroup" data-type="horizontal">
  3.   <input type="checkbox" name="checkbox-1" id="checkbox-1" class="custom" />
  4.   <label for="checkbox-1">1</label>
  5. </div>

¿Como puedo hacer esto? ¿Usando simplemente jquery append para crear los checkboxes?

Gracias!


Título: Re: jquery create checkbox con slider
Publicado por: EFEX en 21 Mayo 2015, 16:05 pm
Por ejemplo.

Código
  1. $("#slider").slider({
  2.  min: 1,
  3.  max: 30,
  4.  value: 1,
  5.  slide: function( event, ui ) {
  6.    // Numero minimo
  7.    var start = 1;
  8.  
  9.    $( "#result" ).html( ui.value );
  10.    // Limpiamos los anteriores Checkboxes
  11.    $('#showChck').html('');
  12.  
  13.    // Segun el numero, segun la cantidad de Checkboxes
  14.    $(new Array(ui.value)).each(function(){
  15.  
  16.      // Agreamos el nuevo checkbox
  17.      $('#showChck').prepend(
  18.        $('<input/>', {type:"checkbox", name:"checkbox-" + start, id:"checkbox-" + start, class:"custom"}),
  19.        $('<label/>', {for: 'checkbox-' + start }).text(start),
  20.        $('<br>')
  21.      );
  22.  
  23.      // Incrementamos
  24.      start++;
  25.    });
  26.  }
  27. });

Código
  1. ...
  2. <!-- Solo agrege un id -->
  3. <fieldset data-role="controlgroup" data-type="horizontal" id="showChck">
  4.  <!-- CheckBoxes -->
  5. ...


Título: Re: jquery create checkbox con slider
Publicado por: gAb1 en 21 Mayo 2015, 18:58 pm
Muchas gracias! Es justo lo que necesitaba :)

¿Habrá alguna forma de que aparezcan al reves? ¿El número 1 al principio?

Por ultimo tengo que crear un click function para los checkboxes y creen un slider cada uno, ¿como puedo acceder al array de la funcion de arriba? ¿O hay que hacerla de nuevo? La cuestión es acceder al ui.value de #slider...

Código
  1. $("#checkbox-" + start).click(function(){
  2.    $("#showSldr").prepend(
  3.        $('<div></div>', {id: "slider-" + start, class: "slider", }),
  4.        $('Lineas: <span>1</span>', {id: 'result-' + start}).text(start)
  5.    );
  6. });


Título: Re: jquery create checkbox con slider
Publicado por: EFEX en 21 Mayo 2015, 19:25 pm
Cambia prepend por append.. sobre los elemento dinamicos utiliza on

Código
  1. // Nota que ahora utilizamos body para que busque en todo el
  2. //contenido DOM segun el selector, en este caso #showChck input.
  3. $('body').on('click', '#showChck input', function() {
  4.  console.log('presionado');
  5.  // Hacer algo
  6. });

En ves de darle propiedad como id=checkbox-1-2-3..etc, podrias utilizar solo el numero que veo que es lo que quieres utilizar.. la variable start no es una variable global definida.


Título: Re: jquery create checkbox con slider
Publicado por: gAb1 en 21 Mayo 2015, 19:46 pm
Estaba pensando en hacer algo como:

Código
  1. var $start = $("#slider").slider('value');
  2. $(new Array($start)).each(function () {
  3.    $('body').on('click', '#showChck input', function() {
  4.        console.log('presionado');
  5.        $("#showSldr").append(
  6.            $('<div></div>', {id: $start, class: "slider", }),
  7.            $('Lineas: <span>1</span>', {id: 'result-' + $start}).text($start)
  8.         );
  9.    });
  10.    $start++;
  11. });
  12.  

El slider no tiene para mover y el id siempre es 2... :(
Otro problema es que al darle otra vez al mismo checkbox crea otro en lugar de ocultar.

Es más complicado de lo que creia... :(


Título: Re: jquery create checkbox con slider
Publicado por: EFEX en 21 Mayo 2015, 19:59 pm
No, ponlo separado.. ahora que es lo que quieres hacer exactamente cuando le das click al checkbox?


Título: Re: jquery create checkbox con slider
Publicado por: gAb1 en 21 Mayo 2015, 20:25 pm
Cuando se le da click a un checkbox debería crearse un slider ligado al checkbox (al numero id) y si se le vuelve a dar (desmarcarlo) deberia ocultarlo y si se vuelve a marcar mostrarlo (ya esta creado). No se si es posible hacerlo asi, en realidad eso es lo que deberia ocurrir, se podría hacer de la manera mas simple.


Título: Re: jquery create checkbox con slider
Publicado por: EFEX en 21 Mayo 2015, 20:35 pm
No tiene por que estar ligado al checkbox(crear un slider por cada checkbox), de esa forma solo crearias sliders inutiles, con un slider oculto y que tome el valor del checkbox seleccionado basta.


Título: Re: jquery create checkbox con slider
Publicado por: gAb1 en 21 Mayo 2015, 22:43 pm
¿De esa manera funcionaria lo que quiero hacer? Por ejemplo, si tengo 10 checkbox y quiero selecionar el tercero se tendria que crear un slider con el id 3 y si seleciono otro, el 7, se crearia otro slider con el id 7.

¿Es posible hacerlo?

Gracias.


Título: Re: jquery create checkbox con slider
Publicado por: EFEX en 22 Mayo 2015, 01:17 am
haa ahora caigo, si, si es posible, tendria que estar pegado al checkbox por que es una lista desordenada..


Título: Re: jquery create checkbox con slider
Publicado por: gAb1 en 22 Mayo 2015, 01:58 am
Ya tengo algo mas solido, el problema es que no consigo obtener el id del checkbox seleccionado:

Código
  1. $('body').on('click', '#showChck input', function() {
  2.    var $id = event.target.id;  // ID DEL CHECKBOX
  3.        $( "#test" ).val($id);
  4.        if ($("#slider-" + $id).length) { // COMPROBAR SI EXISTE
  5.            $("#slider-" + $id).fadeToggle();
  6.    }
  7.        else { // SI NO EXISTE SE CREA
  8.            $("#showSldr").append(
  9.                  $('<div></div>', {id: "slider-" + $id, class: "slider", }),
  10.                  $('Lineas: <span>1</span>', {id: 'result-' + $id}).text($id)
  11.             );
  12.    }
  13. });
  14.  

Ya casi lo tengo! Jejeje

Edito: Me empané! El id del checkbox sera: checkbox-XX y solo necesito el numero... :(

Aunque realmente no me importa que el id del slider sea "slider-checkbox-XX". Mientras funcione me conformo :)

Edito2: Vale ya lo arreglé usando this.id

Ahora necesito saber como puedo inicializarlos, seguramente será justo despues de que se crean habra que añadirlo. Voy a probar.

Edito3: Si que funciona, pero encontre un problema:
Si hay un checkbox activado y mueves el primer slider el activado se desactiva pero el slider sigue visible, y al activarlo se oculta el slider (justo al reves de como debería funcionar).

Asi quedó el código:

Código
  1. $('body').on('click', '#showChck input', function() {
  2.    var x = this.id;
  3.    var $id = x.replace(/\D/g, '');
  4.  
  5.    if ($("#slider-" + $id).length) {
  6.        $("#slider-" + $id).fadeToggle();
  7.        $("#result-" + $id).fadeToggle();
  8.    }
  9.    else {
  10.        $("#showSldr").append(
  11.            $('<div/>', {id: "slider-" + $id, class: "slider"}),
  12.            $('<span/>', {id: 'result-' + $id}).text('4')
  13.        );
  14.        $("#slider-" + $id).slider({
  15.            min: 4,
  16.            max: 100,
  17.            value: 4,
  18.            step: 2,
  19.            slide: function( event, ui ) {
  20.                $( "#result-" + $id ).html( ui.value );
  21.            }
  22.        });
  23.    }
  24. });

Estoy intentando hacer pruebas a ver si consigo que si el checkbox esta desactivado pero el slider esta visible pues que al activarlo no se oculte por el toggle...


Título: Re: jquery create checkbox con slider
Publicado por: EFEX en 22 Mayo 2015, 07:53 am
Código
  1. $("body").on("click", "#showChck input", function() {
  2.  var x = this.id;
  3.  var $id = x.replace(/\D/g, "");
  4.  
  5.  // Obtenemos el slider nuevo
  6.  var slider = $("#slider-" + $id);
  7.  
  8.  // El slider no existe?
  9.  if (!slider.length) {
  10.  
  11.    // Nota que <span> ira dentro del div, sino
  12.    // se complica
  13.    var nuevoSlider = $("<div/>", {
  14.      id: "slider-" + $id,
  15.      "class": "slider"
  16.    }).append($("<span/>", {
  17.      id: "result-" + $id
  18.    }).text("4"));
  19.  
  20.    // Si no existe creamos uno nuevo, nota que
  21.    // estamos en la posision sobre el checkbox
  22.    // asi que al slider nuevo lo ponemos despues
  23.    // de <label>
  24.    $(this).next("label").after(nuevoSlider);
  25.    nuevoSlider.slider({
  26.      min: 4,
  27.      max: 100,
  28.      value: 4,
  29.      step: 2,
  30.      slide: function(event, ui) {
  31.        $("#result-" + $id).html(ui.value);
  32.      }
  33.    });
  34.  }
  35.  
  36.  // Si el checkbox esta seleccionado, mostramos
  37.  // el slider, sino lo ocultamos
  38.  if ($(this).is(":checked")) {
  39.    slider.show();
  40.  } else {
  41.    slider.hide();
  42.  }
  43. });


Título: Re: jquery create checkbox con slider
Publicado por: gAb1 en 22 Mayo 2015, 17:10 pm
Gracias esta funcionando, pero ¿sabes por qué los sliders creados se resetean (el valor) al mover el primer slider? Según la comprobación solo deberían ocultarse.


Título: Re: jquery create checkbox con slider
Publicado por: EFEX en 22 Mayo 2015, 17:33 pm
No debe pasar eso, solo se resetea si cambias el slider principal, por que recreara los checkbox de nuevo.


Título: Re: jquery create checkbox con slider
Publicado por: gAb1 en 22 Mayo 2015, 18:09 pm
Vale gracias, voy a dar el problema por solucionado (porque ya lo solucionaste hace varios mensajes). Abrire otro para otro problema.

Muchas gracias :)