javascript - 为什么这段代码中的 for 循环在 Jquery Selector 之前执行?

标签 javascript jquery

在下面的代码中,for 循环始终首先执行,jQuery 选择器稍后执行。但我想在更改所选 slider 的值后运行此 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');
}

最佳答案

进行编辑以反射(reflect)对该问题的新理解

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

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

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

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

$('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);
    }
});

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

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($('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');
    }
});

关于javascript - 为什么这段代码中的 for 循环在 Jquery Selector 之前执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16080941/

相关文章:

javascript - Angular js 中出现意外错误

javascript - 我可以通过 TSLint 或 tsconfig 阻止 IDE 自动包装属性吗?

javascript - Cypress - 使用 JQuery 对 XHR 请求的 XML 响应解析

jquery - 如何使用jQuery来处理click、dblclick分离中的计时器

jquery - Ui slider 一次侧 slider

javascript - 防止在没有浏览器滚动的情况下添加类

javascript - 无法在javascript中多次调用onclick函数

javascript - 嵌入式 Youtube 视频自动播放 - 在图像幻灯片中间

javascript - 使用 window.open() 打开文件时传递 url 参数(从 ColdFusion 页面)

javascript - 在 ajax 响应上解析 html 元素