【问题标题】:Multiple jquery sliders多个 jquery 滑块
【发布时间】:2011-10-22 14:53:41
【问题描述】:

我正在为多个 jQuery 滑块而苦苦挣扎 -

在这种情况下如果一个滑块增加,其他滑块会相应减少。滑块是动态创建的。我尝试了很多例子,但没有运气。

如果有 3 个滑块,每个设置为 500, 1000,1500,我将解释该场景,如果我将第一个滑块的值增加到 100(500+100),那么应该从其他两个滑块减少 100(每个 50 )。

我检查了http://jsfiddle.net/jenishkottaram/sNfBM/14/http://jsfiddle.net/Y5ZLL/400/,但对我来说没有帮助。

非常感谢任何帮助。

谢谢

//滑块从这里开始

drawSlider: function(elementId, sliderMax, sliderVal, rate) {   

 $("#" + elementId).each(function() {
  $( this ).empty().slider({
        range: "max",
        min: 0,
        max: sliderMax,
        value: sliderVal,
        step: 100,
     slide: function(event, ui) {
        // Update display to current value
        $(this).siblings().text(ui.value);

        // Get current total
        var total = 0;

        $("#" + elementId).not(this).each(function() {
            total += $(this).slider("option", "value");
        });
   // Need to do this because apparently jQ UI
        // does not update value until this event completes
        total += ui.value;

        var max = sliderMax - total;

        // Update each slider
        $("#" + elementId).not(this).each(function() {

            var t = $(this),
                value = t.slider("option", "value");

            t.slider("option", "max", max + value)
                .siblings().text(value + '/' + (max + value));
            t.slider('value', value);
        });
    }});});},

我正在使用 for 循环来动态显示滑块

    for (i = 0; i < aBal.length; i++) {
        for (j = 0; j < balanceRange.length; j++) {
            if (aBal[i] == balanceRange[j]) {
                if (aCur[j] == activeCurrency) {
                    $('#account-wrapper-holder').append('<div class="account-wrapper">' +
                        '<h6>' + aName[j] + ':' + aNum[j] + '</h6>' +
                        '<p><span id="text-tot-allocate-value' + aName[j] + aNum[j] + '">Current cash balance: $' + balanceRange[j] + '</span>' +
                        '<span>Total to allocate:<input type="text" id="tot-allocate-value' + aName[j] + aNum[j] + '" value="' + balanceRange[j] + '" onchange="s.setValue(parseInt(this.value))"/></span></p>' +
                        '<div class="slider_class"><div class="cash-slider" id="slider-' + aName[j] + aNum[j] + '"></div>' +
                        '</div><span class="value">0</span><span class="var-account-total-balance" style="float:right;">$0</span></div>'
                    );
                                                                                       {

                    _this.drawSlider('slider-' + aName[j] + aNum[j] + '', sumOfCurrencyBalances, balanceRange[j], accountRate);

【问题讨论】:

  • 如果一个滑块增加,其他滑块相应减少,我需要添加一个多个滑块。谢谢观看。
  • 好的,所以您不希望其他人相应减少?那是我最初没有得到的部分(你只是把它作为描述的一部分,没有像“我怎样才能让这些其他滑块不改变?”)。
  • 您正在更新其他滑块的值;很明显,这就是让他们的价值观发生变化的原因。您能否澄清一下您希望代码做什么而它没有做什么?
  • 在当前情况下,如果我增加一个滑块,其他两个滑块不会减少(它们甚至不会自动改变)类似于这个抵押计算器estately.com/listings/info/115-46-inwood-st
  • 好的,我们正在取得进展:您希望他们改变(显然他们不是)。那么其他滑块在做什么呢?他们在改变吗?另外,您是否收到任何 JS 错误或只是静默失败?

标签: jquery slider


【解决方案1】:
$("#" + elementId)

这意味着“给我一组只有一个元素的元素(ID 为 elementId 的那个)”。

$("#" + elementId).not(this)

这意味着“给我相同的集合(一个元素),然后给我其中所有不是 this 的元素(即除了实际存在的元素之外的每个元素) .

换句话说,它只是一个空集,这就解释了为什么你的警报显示你没有迭代它......它没有任何东西可以迭代:-)

我认为您可能想要做的是在所有滑块上添加一些类(例如“滑块”)(实际上我认为 jQuery UI 可能会为您执行此操作,因此您可以使用它们添加的任何类)。这样你就可以做到:

$("." + thatClass).not(this)

我认为这是你想要的。

希望对您有所帮助。

【讨论】:

  • 再次感谢。这是类
    在我将其更改为 $("." + slider_class).not(this) .each{}.. 在这种情况下,滑块不会移动
  • 你很接近,但“slider_class”是类,而不是 JS 变量。因此,不要使用 $("." + slider_class),而是这样做:$(".slider_class")。
  • 现在还有一个问题,样式不适合我写了自定义样式,例如 .slider_class .ui-widget-content {..} 但它采用默认的 .ui-widget-content{.. ..}
猜你喜欢
相关资源
最近更新 更多
热门标签