jQuery.on() 无法按预期工作

标签 jquery jquery-ui jquery-ui-slider

我有三个 slider ,我们称它们为一、二、三。 slider 的值应为 一 >= 二 >= 三

我创建了一个 fiddle ,在创建 slider 时设置更改和滑动的回调:

$(document).ready(function() {
    var oneValue = 5,
        twoValue = 3,
        threeValue =1;

    var one = $('#one'),
        two = $('#two'),
        three = $('#three');

    one.slider({
        min: 0,
        max: 10,
        value: oneValue,
        change: function(e, ui) {
            oneValue = ui.value;
            oneTest();
        },
        slide: function(e, ui) {
            oneValue = ui.value;
            oneTest();
        }
    });

    two.slider({
        min: 0,
        max: 10,
        value: twoValue,
        change: function(e, ui) {
            twoValue = ui.value;
            twoTest();
        },
        slide: function(e, ui) {
            twoValue = ui.value;
            twoTest();
        }
    });

    three.slider({
        min: 0,
        max: 10,
        value: threeValue,
        change: function(e, ui) {
            threeValue = ui.value;
            threeTest();
        },
        slide: function(e, ui) {
            threeValue = ui.value;
            threeTest();
        }
    });

    function oneTest() {
        console.log('oneTest');
        if (oneValue < twoValue) {
            two.slider('value', oneValue);
        }
    }
    function twoTest() {
        console.log('twoTest');
        if (twoValue < threeValue) {
            three.slider('value', twoValue);
        }
        if (twoValue > oneValue) {
            one.slider('value', twoValue);
        }
    }
    function threeTest() {
        console.log('threeTest');
        if (threeValue > twoValue) {
            two.slider('value', threeValue);
        }
    }
});

fiddle 在这里:http://jsfiddle.net/RAGvr/3/ 。它的工作原理正如我所期望的那样。

但是,我需要能够在创建 slider 后附加事件处理程序。因此,我创建了 slider ,然后使用 jQuery.on() 监听 changeslide 事件。像这样:

$(document).ready(function() {
    var oneValue = 5,
        twoValue = 3,
        threeValue =1;

    var one = $('#one'),
        two = $('#two'),
        three = $('#three');

    one.slider({
        min: 0,
        max: 10,
        value: oneValue
    });

    two.slider({
        min: 0,
        max: 10,
        value: twoValue
    });

    three.slider({
        min: 0,
        max: 10,
        value: threeValue
    });

    one.on('change slide', function(e, ui) {
        oneValue = ui.value;
        oneTest();
    });

    two.on('change slide', function(e, ui) {
        twoValue = ui.value;
        twoTest();
    });

    three.on('change slide', function(e, ui) {
        threeValue = ui.value;
        threeTest();
    });

    function oneTest() {
        console.log('oneTest');
        if (oneValue < twoValue) {
            two.slider('value', oneValue);
        }
    }
    function twoTest() {
        console.log('twoTest');
        if (twoValue < threeValue) {
            three.slider('value', twoValue);
        }
        if (twoValue > oneValue) {
            one.slider('value', twoValue);
        }
    }
    function threeTest() {
        console.log('threeTest');
        if (threeValue > twoValue) {
            two.slider('value', threeValue);
        }
    }
});

fiddle 在这里,http://jsfiddle.net/RAGvr/4/ ,但根本不像第一个那样工作。如果我移动第三个 slider ,则不会触发其他 slider 的回调。我做错了什么?

最佳答案

You are naming the events wrong .

名称是slidechange:

one.on('slidechange', function(e, ui) {
    oneValue = ui.value;
    oneTest();
});

Demo

您应该查看 API for jQuery UI slider

关于jQuery.on() 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16062347/

相关文章:

javascript - 跳转到网页部分时暂时突出显示 html 元素

jquery - 为什么我的 jQuery 日期选择器 UI 插件不在年份字段中显示向上/向下箭头

php - 根据选项更改价格

javascript - 如何在表单字段输入中生成简短的唯一代码?

javascript - jQuery Accordion "heightStyle: fill",页面加载时显示设置为无

javascript - JQuery UI slider 'slide' 函数未设置 angularJS 值

javascript - 从 AJAX 返回 Jquery UI slider

jQuery ui 多个 slider 与值混淆

javascript - 如何控制iosSlider中的动画速度?

javascript - 如何将下拉列表转换为在 HTML 和 PHP 中显示搜索匹配结果的输入标记?