Html HTML5 type=range - 显示标签
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15195449/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
HTML5 type=range - showing label
提问by Sampat
Is there a way I can also set some label text for each steps in the HTML5 type=range control. Basically I have a range control <input type="range" step=1 min=0 max=4>
and for each steps I want some label to be shown in the control. Is there a way to do this?
有没有一种方法可以为 HTML5 type=range 控件中的每个步骤设置一些标签文本。基本上我有一个范围控件<input type="range" step=1 min=0 max=4>
,对于每个步骤,我都希望在控件中显示一些标签。有没有办法做到这一点?
回答by David Spence
I've put together for you.
我已经为你整理好了。
// 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" />
回答by mischka
I guess the easiest solution (plain Javascript) is:
我想最简单的解决方案(纯 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>
This code does not need jQuery nor CSS and should work on any browser that supports the range input type.
这段代码不需要 jQuery 或 CSS,应该可以在任何支持范围输入类型的浏览器上工作。
回答by Aaron Hudon
Here's an alternative solution, no jQuery required. Uses the HTML5 oninput
event handler, and valueAsNumber
property of the input element.
这是一个替代解决方案,不需要 jQuery。使用 HTML5oninput
事件处理程序和valueAsNumber
输入元素的属性。
Works on my machine certification:Chrome v54
适用于我的机器认证:Chrome v54
<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>
回答by couzzi
OP,
操作,
I put together a demo that uses a range
input with corresponding <p>
tags that act as both labels for the current state of the slider, as well as triggers to change the slider's value.
我整理了一个演示,它使用range
带有相应<p>
标签的输入作为滑块当前状态的标签,以及更改滑块值的触发器。
Plunk
普朗克
http://plnkr.co/edit/ArOkBVvUVUvtng1oktZG?p=preview.
http://plnkr.co/edit/ArOkBVvUVUvtng1oktZG?p=preview。
HTML Markup
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
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
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);
}
Also worth nothing, if you're interested in showing the currentvalue as a label/flag to the user, (instead of many) there's a great article by Chris Coyieron value bubbles for range sliders.
同样一文不值,如果您有兴趣向用户显示当前值作为标签/标志,(而不是许多)Chris Coyier有一篇很棒的文章,关于范围滑块的值气泡。
回答by varun1505
You can use jSlider. Its a jQuery slider plugin for range inputs.
您可以使用 jSlider。它是一个用于范围输入的 jQuery 滑块插件。
https://github.com/egorkhmelev/jslider
https://github.com/egorkhmelev/jslider
Just check out the demos and documentation. Hope this helps.
只需查看演示和文档即可。希望这可以帮助。