2

在下面的代码中,for循环总是首先执行,jQuery 选择器在后面。但是我想在更改所选滑块的值后运行这个 for 循环。

$('div[name="FirstSliderselector"]').slider('value', $("#MasterSlider").slider("value"));
var FirstSliders = $('div[name="FirstSliderselector"]');
for (var i = 0; i < FirstSliders.length; i++) {
     console.log('for loop executed');
}
4

2 回答 2

4

编辑以反映对问题的新理解

您要做的是为更改事件传递一个回调函数,如下所示:

我现在理解的是,当您更改滑块的值时,您想触发一个更改事件。您可以通过以下方式以编程方式设置值:

$('div[name="FirstSliderselector"]').slider('value', $('#MasterSlider').slider('value'));

为了for在完成此操作后执行循环,您需要将更改事件绑定到滑块,如下所示:

$('div[name="FirstSliderselector"]').slider({
    change: function (event, ui) {
        var firstSliders = $('div[name="FirstSliderselector"]'),
            i;
        for (i = 0; i < firstSliders.length; i += 1) {
            console.log(ui.value);
        }
    }
});

你也可以这样做:

$('div[name="FirstSliderselector"]').on('slidechange', function (event, ui) {
    var firstSliders = $('div[name="FirstSliderselector"]'),
        i;
    for (i = 0; i < firstSliders.length; i += 1) {
        console.log(ui.value);
    }
});

如果您想确保仅在以编程方式完成值更改而不是在滑块滑动后触发此操作,您的回调函数将变为:

function (event, ui) {
    if (!event.originalEvent) {
        var firstSliders = $('div[name="FirstSliderselector"]'),
            i;
        for (i = 0; i < firstSliders.length; i += 1) {
            console.log(ui.value);
        }
    }
}

最后,如果这些都不能满足您的需求,正如 Chris GW Green 所建议的那样,总有一个 when-done 构造:

$.when($('div[name="FirstSliderselector"]').slider('value', $('#MasterSlider').slider('value'));).then(function () {
    var firstSliders = $('div[name="FirstSliderselector"]'),
        i;
    for (i = 0; i < firstSliders.length; i += 1) {
        console.log('for loop executed');
    }
});
于 2013-04-18T10:59:19.723 回答
1

保证在滑块分配后运行 for 循环...

var FirstSliders = $('div[name="FirstSliderselector"]'),
    MastSliderValue = $("#MasterSlider").slider("value");

function updateSliders(){
    FirstSliders.slider('value', MastSliderValue);
}

$.when(
    updateSliders()        
).done(
    function(){
        for (var i = 0; i < FirstSliders.length; i++) {
             console.log('for loop executed');
        }
    }
);

感谢第一次尝试的人 -1 ;) 新手。

于 2013-04-18T12:38:21.933 回答