【问题标题】:jQuery UI slider initializationjQuery UI 滑块初始化
【发布时间】:2011-07-05 01:53:36
【问题描述】:

我在一个页面上有多个滑块,每个滑块都有“滑块”类,每个滑块都带有一个复选框。加载页面时,复选框通过 PHP 填充为选中或未选中。基于此,我想启用或禁用滑块。

删除不相关的部分,我有:

$(".slider").slider({
        ...
        disabled: function()
        {
            var $field = $(this).prevAll("input");
            return $field.is(':checked');
        },
        ...
});

我什至不确定是否可以将匿名函数传递给禁用的选项。这是合法的吗?它似乎没有工作......

当然我可以分别初始化#slider1、#slider2、#slider3...等,但我正在寻找最优雅、最紧凑的解决方案。

$(this) 是否已经超出范围,现在它在选项内? javascript 在这些情况下如何工作?如果它没有...我知道 $(this).prevAll("input") 选择器是准确的,因为我已经用 Firebug 对其进行了检查。

想法?谢谢!

【问题讨论】:

    标签: jquery jquery-ui


    【解决方案1】:

    我什至不确定是否有可能 将匿名函数传递给 禁用选项。这合法吗?

    不。您不能将函数引用作为参数传递给该选项。

    您可以立即执行该匿名函数,但 this 的值会出错:

    $(".slider").slider({
            ...
            disabled: (function()
            {
                var $field = $(this).prevAll("input");
                return $field.is(':checked');
            })(),
            ...
    });
    

    作为一种解决方法,您可以将代码包装在 .each() 块中:

    $(".slider").each(function () {
        var $this = $(this);
        var disabled = $this.prevAll("input").is(":checked");
        $(this).slider({
            ...
            disabled: disabled
            ...
        });
    });
    

    【讨论】:

    • 谢谢 - .each() 包装很有效。尽管您的第一个代码块由于 this 的值而无法工作,但它似乎与我的非常相似,只是您将它包装在一组额外的括号中。您在此处遵循哪些 JS 规则以使您的规则有效?你能解释一下,或者指点我一份涵盖这种语法的文档吗?再次感谢。
    • @Jordan:不同之处在于我立即执行您在末尾使用() 创建的函数。如果你有一个函数foo 并在那里调用它(foo()),那将是同样的事情,除了你声明foo 内联。这是一个很好的问题/答案:stackoverflow.com/q/186024/497356
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2012-08-22
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多