javascript - 具有最小范围的 jQuery 移动范围 slider

标签 javascript jquery jquery-mobile

在我的项目中,我有一个范围 slider 的要求,它有一个最小范围,这意味着 handle 值之间的差异不应低于某个限制。到目前为止,我已经尝试了以下方法,但它不起作用。

在 HTML 中

<div data-role="rangeslider">                              
   <input name="departureStartRange" id="departureStartRange" min="0" max="24" value="11" type="range" />                              
   <input name="departureEndRange" id="departureEndRange" min="0" max="24" value="21" type="range" />
</div>

在 JS 中

var MIN_RANGE = 4;
$("#departureStartRange, #departureEndRange").on("change", function(e){ 
    var vala = parseInt($("#departureStartRange").val());
    var valb = parseInt($("#departureEndRange").val());
    var id=$(this).attr("id"),thisVal = parseInt($("#"+id).val()),newVal = (id == "departureStartRange") ? thisVal -1 : thisVal + 1;
    if((valb-vala) < MIN_RANGE){
        e.preventDefault();
        $("#"+id).val(newVal).slider('refresh');
        return false;
    }
    $(".departureRange").text($("#departureStartRange").val()+" hrs - "+$("#departureEndRange").val()+" hrs")    
})

此代码可防止 slider 值发生变化,但当我们拖动时 handle 仍会移动。任何帮助都感激不尽。提前致谢。

最佳答案

我可以改进您的代码,但是如果您将一个拇指拖到另一个拇指上,它会出于某种原因忽略更改事件:

<div id="theRangeSlider" data-role="rangeslider">
    <input name="departureStartRange" id="departureStartRange" min="0" max="24" value="11" type="range" />
    <input name="departureEndRange" id="departureEndRange" min="0" max="24" value="21" type="range" />
</div>

var MIN_RANGE = 4;
$("#departureStartRange, #departureEndRange").on("change", function (e) {
    var vala = parseInt($("#departureStartRange").val());
    var valb = parseInt($("#departureEndRange").val());
    var id = $(this).prop("id");        

    if ((valb - vala) < MIN_RANGE) {
        e.preventDefault();
        var newVal = vala + MIN_RANGE;
        if (id == "departureStartRange") {
            newVal = valb - MIN_RANGE;
        }

        $(this).val(newVal);
        $("#theRangeSlider").rangeslider("refresh");
        return false;
    }
});

DEMO

更新:要处理将一个 slider 拖到另一个 slider 上会忽略更改事件的异常,我们可以使用 slider stop event :

$(document).on( "slidestop","#departureStartRange, #departureEndRange", function( event, ui ) {
    $(this).trigger("change");
} );

Updated DEMO

关于javascript - 具有最小范围的 jQuery 移动范围 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30964097/

相关文章:

javascript - 如何获取(内置)麦克风的硬件信息?

javascript - Sharepoint 窗口滚动不触发

javascript - 如何将 "slideup()"和 "slidedown()"函数应用于 Jquery Mobile 1.4.5 可折叠?杰菲德尔

html - 找出选择了哪个按钮并使用移动 jquery 发布它

javascript - 通用模块定义-写作风格

javascript - 如何在 google maps api 中创建带有建议的 "did you mean"链接?

javascript - 猴子修补一个立即调用的命名函数

javascript - DIV 在页面上随机淡入

jQuery 和 Drupal 页面加载

Android Phonegap 应用程序无法连接到互联网