2012-02-02 13 views
8

Tengo un control deslizante jQuery UI:jQuery UI Slider - Valor devuelto desde el evento 'slide' sobre la liberación es diferente de 'cambio' valor

$('div.slider').slider({ 
    range: true, 
    step: 250, 
    min: 1000, 
    max: 500000, 
    values: [1000,500000], 
    change: function(event, ui){ 
     console.log($(this).slider('values', 0)+','+$(this).slider('values', 1)); 
    }, 
    slide: function(event, ui){ 
     console.log($(this).slider('values', 0)+','+$(this).slider('values', 1)); 
    } 
}); 

Por alguna extraña razón, cuando se libera el control deslizante (mouseup) del el valor cambia ligeramente de lo que era. El evento de diapositivas devuelve algo diferente de lo que es el evento de cambio. ¿Alguien tiene alguna idea de lo que podría estar causando esto y cómo podría resolverlo?

Voy a tener una operación bastante intensa en la devolución de llamada para el evento de cambio (lo que significa que no puedo usar sldie), pero también necesito mostrar los valores del control deslizante en vivo, así que no puedo usar solo uno o el otro

Aquí es un violín con esta rareza en acción: http://jsfiddle.net/5W6Zh/

Gracias de antemano

+1

Parece que cuando coges/deslice el control deslizante, se toma el valor del centro del botón, pero cuando suelta, toma el valor del borde izquierdo. Además, simplemente haciendo clic en la pista nunca produce este efecto, entonces me inclino a pensar que el código detrás del botón está usando diferentes puntos de referencia para arrastrar/soltar. – sottenad

Respuesta

12

nos encontramos con esto esta noche (y anoche, y durante los últimos meses). Lo que hicimos para solucionarlo fue usar ui.value y ui.values ​​[0] en lugar de $ ("# slider"). Slider ('values', 0).

Utilice esta:

change: function(event, ui) { 
    $('.values').text(ui.values[0] + ',' + ui.values[1]); 
} 

En lugar de:

change: function(event, ui) { 
    $('.values').text($(this).slider('values', 0) + ',' + $(this).slider('values', 1)); 
} 

que se bifurcó su jsFiddle y lo hizo trabajar: http://jsfiddle.net/danhixon/9JdhU/1/

Honestamente no creo que hubiera encontrado el solución sin su pregunta y jsfiddle - Seguí comparándolo con la demo de jquery-ui hasta que encontré esta diferencia.

0

Su min, max valores de paso y un aspecto un poco raro, pero supongo que acaba de conseguir que se confundan.

Descubrí que el control deslizante no funciona demasiado bien con pasos mucho más pequeños que 1, así que cambié para usar enteros solamente y dividir después. Nunca he tenido ningún problema desde entonces.

+1

He cambiado a los valores anteriores y desafortunadamente sigo teniendo esta rareza . :/ – wyqydsyq

2

Use ui.value en el controlador de diapositivas para obtener un valor más preciso.

13

¡Encontré una solución! SIEMPRE hacer esto en un evento de diapositivas:

$(this).slider('value', ui.value); 

y ya está bueno para ir

+1

¡Eso es todo! ¡Te amo amigo! –

+0

Mi control deslizante solo devuelve '[object Object]'. – nipponese

+2

¡perfecto! He estado golpeando mi cabeza en mi escritorio hoy debido a esto ... sé que es un año tarde, pero @nipponese, estás obteniendo '[object object]' porque es un deslizador de rango, intenta: '$ (this) .slider ('values', ui.values ​​[0]); ' – kingkode

Cuestiones relacionadas