2

Ладно, очень похожий вопрос был здесь спросилJQuery UI Slider изменения и слайд-события сообщают различные результаты

jQuery UI Slider - Value returned from 'slide' event on release is different from 'change' value

Но ответ был неудовлетворительным, на мой взгляд. Вот мой код JavaScript: http://jsfiddle.net/AsDZJ/4/

function slideVal() { 
    var number = $("#number_slider").slider("value"); 
    $("#number_field").append('Slide: ' + number + '<br/>'); 
} 

function changeVal() { 
    var number = $("#number_slider").slider("value"); 
    $("#number_field").append('Change: ' + number + '<br/>'); 
} 

$(function() { 
    $("#number_slider").slider({ 
     min: 1, 
     max: 10, 
     change: changeVal, 
     slide: slideVal 
    }); 

    $("#number_slider").slider("value", 5); 
}); 

Вопрос заключается в том, что ползунок докладывает разные значения при вызове изменения обработчика, и когда слайд обработчик вызывается.

Теперь другой вопрос указывает на то, что если вы объявляете функцию анонимно, вы можете просто использовать ui.value, например, так:

$("#number_slider").slider({ 
    min: 1, 
    max: 10, 
    change: function(event, ui) { 
     $("#number_field").append('Change: ' + ui.value + '<br/>'); 
    } 
}); 

Это даст более достоверные результаты, но также означает, что если, как и в моем случае, у меня есть много сложной логики для выполнения всякого события, когда меняются события, я должен повторить код. Кроме того, вычисления включают значения ползунка из нескольких ползунков.

Как получить доступ к правильному значению из явно объявленной функции? Является ли это поведение в jQuery UI ошибкой?

Благодаря

+0

Ну, вот одно решение. Мне кажется, что это довольно глупо, возможно, кто-то может дать лучший ответ. Я установил некоторые переменные, доступные для обеих областей. Внутри функции анонимного обработчика событий я сначала установил соответствующую «глобальную» переменную с помощью 'ui.value', затем вызовет функцию, которая обрабатывает логику вычислений. http://jsfiddle.net/AsDZJ/6/ – Sibicle

+0

Привет, я не знаю, поможет ли это, но вы попробуете использовать событие остановки и перекрестите результаты с событием изменения. Я говорю это, потому что окончательное значение в изменении должно быть значением события остановки, а не событием слайда, я думаю. – joao

ответ

0

Вы все еще можете определить глобальные функции с параметрами, при инициализации бегунок просто передать имя функции, вместо использования анонимных обратных вызовов

function slideVal(e, ui) { 
    var number = ui.value; 
    $("#number_field").append('Slide: ' + number + '<br/>'); 
} 

function changeVal(e, ui) { 
    var number = ui.value; 
    $("#number_field").append('Change: ' + number + '<br/>'); 
} 

$(function() { 
    $("#number_slider").slider({ 
     min: 1, 
     max: 10, 
     change: changeVal, 
     slide: slideVal 
    }); 

    $("#number_slider").slider("value", 5); 
});