javascript - Jquery UI slider 附加标签

标签 javascript jquery jquery-ui jquery-ui-slider

我有一个模式,它在某些时间显示,并且上面有两个 slider ,应该显示一些值。代码如下:

div#averageAnswerModal.modal.fade.custom-modal(tabindex="-1", role="dialog", aria-labelledby="myModalLabel" aria-hidden="true")
div.modal-content
    div.modal-body(style='text-align: center;')
        h2 Your neighbor's answers average was:
        div
            div#noAvg Your neighbors didn't give any anwer
            div#avgSlider
            span#avgLabel
        h2 Your answer was:
        div
            dvi#notAnswered You didn't give anwer
            div#yourSlider
            span#yourLabel

我有这个代码来设置 sldiers

initializeModal = function() {
        var positionLabel = function(label, slider, val) {
            $(label).html(val).position({
                my: 'center top',
                at: 'center bottom',
                of: $(slider + ' > .ui-slider-handle')
            })
        }

        myModal = $('#averageAnswerModal').modal({
            show: false,
            keybord: false
        })

        $("#avgSlider").slider({
            max: 100,
            disabled: true,
            change: function(event, ui) {
                positionLabel('#avgLabel', "#avgSlider", ui.value)
            }
        })

        $("#yourSlider").slider({
            max: 100,
            disabled: true,
            change: function(event, ui) {
                positionLabel('#yourLabel', "#yourSlider", ui.value)
            }
        })
    }

这段代码激发了它们:

createSplashSliders = function(avg, your) {
    myModal.modal('show')
    if (avg === -1) {
        $("#noAvg").show()
        $("#avgSlider").hide()
        $('#avgLabel').hide()
    } else {
        $("#noAvg").hide()
        $("#avgSlider").show()
        $('#avgLabel').show()
        $("#avgSlider").slider('value', avg)
    }

    if (your === -1) {
        $("#notAnswered").show()
        $("#yourSlider").hide()
        $('#yourLabel').hide()
    } else {
        $("#notAnswered").hide()
        $("#yourSlider").show()
        $('#yourLabel').show()
        $("#yourSlider").slider('value', your)
    }
}

slider 正确显示,我想将选定的值附加到 handle 下方。它附加了像下面两行这样的值,如果我重复使用该页面,则每次模式显示时,跨度都会向下移动一行。当我在 positionLabel 中使用调试器停止代码并复制并粘贴相同的代码时,标签就会附加到正确的位置。

我被这个问题困扰了半天,还是不明白哪里出了问题。

更新

Fiddle 。如果您将调试器放入 positionLabel 中并单步调试它就会正确定位标签。所以我在某个地方遇到了时间问题,只是不知道在哪里或为什么。

最佳答案

如果我添加超时

        var positionLabel = function(label, slider, val) {
            setTimeout(function() {
                $(label).html(val).position({
                    my: 'center top',
                    at: 'center bottom',
                    of: $(slider + ' > .ui-slider-handle')
                })
            }, 200);
        }

这有效...但超时时间为 5 时无效。为什么我需要这个超时?

关于javascript - Jquery UI slider 附加标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22533546/

相关文章:

javascript - 如何在网格中获取图像的动态 ID 并在图像悬停时显示 div

jquery - 滑入和滑出图像

jquery - 如何将样式表仅应用于我的 jquery datepicker 小部件?

javascript - 不使用服务器端语言(也许是javascript?)来获取状态代码

javascript - 显示模态时锁定父窗口不滚动

javascript - 在 java 脚本中使用 CSS 使文本的不同部分(一个 div)着色

Jquery - 不可滚动 div 上的滚动事件

javascript - Yeoman:从缓存中安装依赖项

javascript - window.localStorage.setItem 和 localStorage.setItem 之间应该有什么区别吗?

javascript - 如何一次只显示一个文本框并单击下一步显示下一个输入字段