HTML5 type = range - 显示标签

时间:2013-03-04 05:57:51

标签: html5

有没有办法我还可以为HTML5 type = range控件中的每个步骤设置一些标签文本。基本上我有一个范围控件<input type="range" step=1 min=0 max=4>,对于每个步骤,我希望在控件中显示一些标签。有没有办法做到这一点?

7 个答案:

答案 0 :(得分:25)

我为你准备好了。

// define a lookup for what text should be displayed for each value in your range
var rangeValues =
{
    "1": "You've selected option 1!",
    "2": "...and now option 2!",
    "3": "...stackoverflow rocks for 3!",
    "4": "...and a custom label 4!"
};


$(function () {

    // on page load, set the text of the label based the value of the range
    $('#rangeText').text(rangeValues[$('#rangeInput').val()]);

    // setup an event handler to set the text when the range value is dragged (see event for input) or changed (see event for change)
    $('#rangeInput').on('input change', function () {
        $('#rangeText').text(rangeValues[$(this).val()]);
    });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="range" id="rangeInput" name="rangeInput" step="1" min="1" max="4">
<label id="rangeText" />

答案 1 :(得分:16)

我想最简单的解决方案(普通Javascript)是:

<fieldset>
    <label for="rangeVal">resolution (dpi):</label>
    <input type ="range" max="1000" min="20"
        oninput="document.getElementById('rangeValLabel').innerHTML = this.value;"
        step="1" name="rangeVal" id="rangeVal" value="200">
    </input>
    <em id="rangeValLabel" style="font-style: normal;"></em>
</fieldset>

此代码不需要jQuery或CSS,并且可以在任何支持范围输入类型的浏览器上运行。

答案 2 :(得分:11)

这是一个替代解决方案,不需要jQuery。使用输入元素的HTML5 oninput事件处理程序和valueAsNumber属性。

适用于我的机器认证: Chrome v54

&#13;
&#13;
<form name="myform" oninput="range1value.value = range1.valueAsNumber">
  <input name="range1" type="range" step="1" min="0" max="4" value="1">  
  <output name="range1value" for="range1" >1</output>
</form>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

OP,

我整理了一个演示,该演示使用range输入和相应的<p>标记,这两个标记充当滑块当前状态的标签,以及更改滑块值的触发器。

普拉克

http://plnkr.co/edit/ArOkBVvUVUvtng1oktZG?p=preview


HTML标记

<div class="rangeWrapper">
    <input id="slide" type="range" min="1" max="4" step="1" value="1"  /> 
    <p class="rangeLabel selected">Label A</p>
    <p class="rangeLabel">Label B</p>
    <p class="rangeLabel">Label C</p>
    <p class="rangeLabel">Label D</p>
</div>
的Javascript
$(document).ready(function(){

  $("input[type='range']").change(function() {
    slider = $(this);
    value = (slider.val() -1);

    $('p.rangeLabel').removeClass('selected');
    $('p.rangeLabel:eq(' + value + ')').addClass('selected');

  });

  $('p.rangeLabel').bind('click', function(){
    label = $(this);
    value = label.index();
    $("input[type='range']").attr('value', value)
                            .trigger('change');
  });

});

CSS

input[type="range"] {
    width: 100%;
}

p.rangeLabel {
    font-family: "Arial", sans-serif;
    padding: 5px;
    margin: 5px 0;
    background: rgb(136,136,136);
    font-size: 15px;
    line-height 20px;
}

p.rangeLabel:hover {
    background-color: rgb(3, 82, 3);
    color: #fff;
    cursor: pointer;
}

p.rangeLabel.selected {
    background-color: rgb(8, 173, 8);
    color: rgb(255,255,255);
}

同样值得一无所知,如果您有兴趣将当前值显示为用户的标签/标志,(而不是很多),那么值很大的article by Chris Coyier值范围滑块。

答案 4 :(得分:0)

没有本地方式可以做到这一点。由于输入[type = range]支持得很差,我建议使用jQuery UI滑块以及附加标签here的方法。

答案 5 :(得分:0)

您可以使用jSlider。它是一个用于范围输入的jQuery滑块插件。

https://github.com/egorkhmelev/jslider

查看演示和文档。希望这会有所帮助。

答案 6 :(得分:0)

FWIW标准(HTML 5.1HTML Living Standard)在使用label时指定option的{​​{1}}属性。示例代码here

目前还没有任何浏览器实现。