我以前问过这个问题,我很惊讶没有人能帮到我。你可以在这里看到我正在尝试的东西,http://training.mercury.stellarbluewebdesign.com/GainOil/,你会注意到,在句柄释放之前,对顶部的值的更新是不正确的。有人告诉我,我必须在计算它们的函数中使用ui.value,但似乎没有人知道确切的方法。jquery代码在这里是http://training.mercury.stellarbluewebdesign.com/GainOil/js/functions.js
发布于 2012-11-14 10:59:55
您正在调用的“slide”事件正在向您传递以下内容中的新值:
变量值= ui.value;
不过,这还不是实际设置的值。直到您松开鼠标或再次移动,该值才会被设置。
如果添加以下内容:
var realval = $( ".slider" ).slider( "option", "value" );
console.log(realval);
在您的幻灯片事件函数中,它将返回用于执行计算的数字。
您应该向calculate_savings函数添加一个参数,您可以传递该参数来执行该计算。但是基于你拥有的滑块数量,这可能不是一个好主意。
发布于 2012-11-14 11:12:19
// hook all sliders to their span.value (display)
$( '.slider' ).bind( 'slide', function( e, ui )
{
var field = $( this ).attr( 'field' );
var value = ui.value;
var $matchingElem = $( '.value[field="' + field + '"]' )
var decimals = $matchingElem.attr( 'decimals' ) || 0
$matchingElem.text( addCommas( value ) )
calculate_savings();
} ).bind( 'slidechange', function()
{
calculate_savings();
} ) // Ps. your missing a semicolon in your original script here <<<<
为什么要绑定单独计算节省??这样不就行了吗?
// hook all sliders to their span.value (display)
$( '.slider' ).bind( 'slide', function( e, ui )
{
var field = $( this ).attr( 'field' );
var value = ui.value;
var $matchingElem = $( '.value[field="' + field + '"]' )
var decimals = $matchingElem.attr( 'decimals' ) || 0
$matchingElem.text( addCommas( value ) )
calculate_savings();
} );
发布于 2012-11-14 12:06:17
inKit是正确的。“”事件预测的是,如果回调函数不取消它(例如,通过返回false),滑动值将发生变化。虽然它对于您的用例来说并不理想,但是以这种方式编程使开发人员能够选择是否允许滑动事件通过;不幸的是,这意味着在运行回调函数时,该值尚未实际更新。
我认为inKit建议修改calculate_savings函数,以便它可以处理正在更改的特定滑块的“未来”值的传递,这可能是更好的解决方案,但它可能需要比您感兴趣的更多的重构。
另一种方法是使用0毫秒的setTimeout中断calculate_savings调用的回调周期。
以下是您的代码的相关部分:
// hook all sliders to their span.value (display)
$( '.slider' ).bind( 'slide', function( e, ui )
{
var field = $( this ).attr( 'field' );
var value = ui.value;
var $matchingElem = $( '.value[field="' + field + '"]' )
var decimals = $matchingElem.attr( 'decimals' ) || 0
$matchingElem.text( addCommas( value ) )
// Allow the slide event time to complete successfully and update the slider's value before calculating the savings.
setTimeout(function(){calculate_savings();},0);
} )
新的实际代码可以在这里看到:http://jsfiddle.net/maXcs/1/
注意:随着更新现在如预期的那样工作,现在可以根据VIDesignz的建议删除slidechange绑定。
https://stackoverflow.com/questions/13372263
复制相似问题