2

好了,一個非常類似的問題在這裏問jQuery UI的滑塊改變和幻燈片事件報告不同的結果

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'設置合適的'global'變量,然後調用處理計算邏輯的函數。 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); 
});