2011-08-02 13 views
13

¿Cuál es una forma confiable de detectar el cambio de un control deslizante de selección en jQuery Mobile? Intento vincular un controlador para cambiar el evento del control de selección en sí, pero se dispara en la visualización de la página inicial, y luego se dispara varias veces al hacer clic y, a veces, incluso al pasar el mouse (en el navegador de escritorio).Detección del evento de cambio de control deslizante de selección en jQuery Mobile

El ejemplo de trabajo mínima de este comportamiento está publicada aquí: http://jsfiddle.net/NPC42/mTjtt/3/

Esto es probablemente causado por jQuery Mobile añadir más elementos al estilo del selecto como el flip-palanca, pero no puedo encontrar la manera recomendada de hazlo.

Cualquier ayuda es muy apreciada.

+0

+1 para una buena pregunta. Parece que es un evento que burbujea –

Respuesta

8

no puede ser la solución más ingeniosa pero funciona http://jsfiddle.net/mTjtt/4/

+0

Gracias por la idea, pero para mí todavía causa 2-3 alertas en cada par de cambios de estado :(Estoy revisando Chrome, quizás no es una buena idea y debería probarse en el móvil real? Sin embargo, eso sería una pesadilla para depurar. – NPC

+0

Raro, no puedo reproducir ese problema (en Chrome) pero es solo en jsfiddle. – Calum

+0

¿Entonces no ves el problema? Hmmm ... – NPC

2

vivo Ejemplo:

JS:

$('#my-slider').change(function(event) { 
    event.stopPropagation(); 
    var myswitch = $(this); 
    var show  = myswitch[0].selectedIndex == 1 ? true:false; 

    if(show) {    
     $('#show-me').fadeIn('slow'); 
     $('#first-me').fadeOut(); 
    } else {    
     $('#first-me').fadeIn('slow'); 
     $('#show-me').fadeOut(); 
    } 
}); 

HTML:

<div data-role="page" id="home" class="type-home"> 
    <div data-role="content"> 
     <div class="content-primary"> 
      <p>The flip toggle switch is displayed like this:</p> 
      <div data-role="fieldcontain"> 
       <label for="slider">Flip switch:</label> 
       <select name="slider" id="my-slider" data-role="slider"> 
        <option value="off">Off</option> 
        <option value="on">On</option> 
       </select> 
      </div> 
      <div id="first-me"> 
       <p> 

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. 
       </p> 
      </div> 
      <div id="show-me" class="hidden"> 
       <p> 
        Bacon ipsum dolor sit amet bresaola velit laboris bacon eiusmod. Id ex short ribs, dolor dolore rump pork belly beef ad ullamco salami labore aute ut. Jowl et in do, fatback jerky salami reprehenderit irure laboris pork loin commodo qui eu. Chuck tri-tip cupidatat, turkey sunt in anim jerky pork belly exercitation bacon. Eu corned beef qui adipisicing, ground round veniam turkey chicken incididunt deserunt. Proident t-bone chuck, non excepteur biltong elit in anim minim swine short loin magna do. Sint enim nisi, minim nulla tongue ut incididunt ground round. 
       </p> 
      </div> 
     </div> 
    </div> 
</div> 

ACTUALIZACIÓN:

he planteado un problema/error con JQM aquí:

+0

¿Has comprobado cuántas veces se ejecuta ese código? Se llama 2-3 veces para mí. Creo que el hecho de que hagas animaciones lentamente impide que uno vea esto. Aquí hay un simple cambia a tu código en vivo para ver este efecto : http://jsfiddle.net/NPC42/KCQ4Z/59/ – NPC

+0

Al principio no lo vi, pero es la versión de jQuery 1.6.2 lo que está causando esto. 1.6.1 está bien en mi prueba. tal vez debería usar el evento click en lugar del evento de cambio –

+0

hmm click event no parece activarse.probando –

1

utilizar este código,

$(".mySliders").slider({ 
    create: function (event, ui) { 
     $(this).bind('change', function() { 
      ... 
      ... 
     }); 
    } 
}); 

! No ponga type = "rango" en sus etiquetas de entrada, ponga type = "text" en su lugar.

Dado que está llamando a la función del control deslizante manualmente.

+0

No funciona diferente de .change binding, lo probé en el violín original: http://jsfiddle.net/mTjtt/127/ ¿Lo has probado realmente? – NPC

Cuestiones relacionadas