2

好的,所以这里问了一个非常相似的问题

jQuery UI Slider - 发布时从“幻灯片”事件返回的值与“更改”值不同

但在我看来,答案并不令人满意。这是我的 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 中的这种行为是错误吗?

谢谢

4

1 回答 1

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 );
});
于 2013-05-16T13:30:47.240 回答