首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jquery滑块,调用函数时总是按1关闭,直到释放句柄为止

jquery滑块,调用函数时总是按1关闭,直到释放句柄为止
EN

Stack Overflow用户
提问于 2012-11-14 10:42:24
回答 3查看 182关注 0票数 1

我以前问过这个问题,我很惊讶没有人能帮到我。你可以在这里看到我正在尝试的东西,http://training.mercury.stellarbluewebdesign.com/GainOil/,你会注意到,在句柄释放之前,对顶部的值的更新是不正确的。有人告诉我,我必须在计算它们的函数中使用ui.value,但似乎没有人知道确切的方法。jquery代码在这里是http://training.mercury.stellarbluewebdesign.com/GainOil/js/functions.js

EN

回答 3

Stack Overflow用户

发布于 2012-11-14 10:59:55

您正在调用的“slide”事件正在向您传递以下内容中的新值:

变量值= ui.value;

不过,这还不是实际设置的值。直到您松开鼠标或再次移动,该值才会被设置。

如果添加以下内容:

代码语言:javascript
运行
复制
var realval = $( ".slider" ).slider( "option", "value" );
console.log(realval);

在您的幻灯片事件函数中,它将返回用于执行计算的数字。

您应该向calculate_savings函数添加一个参数,您可以传递该参数来执行该计算。但是基于你拥有的滑块数量,这可能不是一个好主意。

票数 0
EN

Stack Overflow用户

发布于 2012-11-14 11:12:19

代码语言:javascript
运行
复制
    // 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 <<<<

为什么要绑定单独计算节省??这样不就行了吗?

代码语言:javascript
运行
复制
        // 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();

} );
票数 0
EN

Stack Overflow用户

发布于 2012-11-14 12:06:17

inKit是正确的。“”事件预测的是,如果回调函数不取消它(例如,通过返回false),滑动值将发生变化。虽然它对于您的用例来说并不理想,但是以这种方式编程使开发人员能够选择是否允许滑动事件通过;不幸的是,这意味着在运行回调函数时,该值尚未实际更新。

我认为inKit建议修改calculate_savings函数,以便它可以处理正在更改的特定滑块的“未来”值的传递,这可能是更好的解决方案,但它可能需要比您感兴趣的更多的重构。

另一种方法是使用0毫秒的setTimeout中断calculate_savings调用的回调周期。

以下是您的代码的相关部分:

代码语言:javascript
运行
复制
// 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绑定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13372263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档