162

我正在制作一个我想使用范围滑块的网站(我知道它只支持 webkit 浏览器)。

我已经完全集成它并且工作正常。但我想用 atextbox来显示当前的幻灯片值。

我的意思是,如果最初滑块的值为 5,那么在文本框中它应该显示为 5,当我滑动文本框中的值时应该会改变。

我可以只使用CSSor来做到这一点吗html?我想避免JQuery。是否可以?

4

12 回答 12

256

对于那些仍在寻找没有单独 JavaScript 代码的解决方案的人。如果不编写 javascript 或 jquery 函数,几乎没有简单的解决方案:

<input type="range" value="24" min="1" max="100" oninput="this.nextElementSibling.value = this.value">
<output>24</output>

JsFiddle 演示

如果要在文本框中显示值,只需将输出更改为输入。


需要注意的是: 它仍然是在您的 html 中编写的 Javascript,我们可以在 js 中编写类似下面的内容来做类似的事情:

 document.registrationForm.ageInputId.oninput = function(){
    document.registrationForm.ageOutputId.value = document.registrationForm.ageInputId.value;
 }

除了元素的 id,还可以使用名称,现代浏览器都支持这两者。

于 2013-09-21T18:52:05.880 回答
139

这使用javascript,而不是直接使用jquery。它可能会帮助您入门。

function updateTextInput(val) {
          document.getElementById('textInput').value=val; 
        }
<input type="range" name="rangeInput" min="0" max="100" onchange="updateTextInput(this.value);">
<input type="text" id="textInput" value="">

于 2012-04-04T04:19:19.937 回答
49

具有可编辑输入的版本:

<form>
    <input type="range" name="amountRange" min="0" max="20" value="0" oninput="this.form.amountInput.value=this.value" />
    <input type="number" name="amountInput" min="0" max="20" value="0" oninput="this.form.amountRange.value=this.value" />
</form>

http://jsfiddle.net/Xjxe6/

于 2014-04-11T03:12:31.450 回答
39

更好的方法是在输入本身而不是整个表单上捕获输入事件(性能方面):

<input type="range" id="rangeInput" name="rangeInput" min="0" max="20" value="0"
       oninput="amount.value=rangeInput.value">                                                       

<output id="amount" name="amount" for="rangeInput">0</output>

这是一个小提琴id根据 Ryan 的评论添加)。

于 2014-01-19T11:06:14.697 回答
20

如果您希望当前值显示在滑块下方并随之移动,请尝试以下操作:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>MySliderValue</title>

</head>
<body>
  <h1>MySliderValue</h1>

  <div style="position:relative; margin:auto; width:90%">
    <span style="position:absolute; color:red; border:1px solid blue; min-width:100px;">
    <span id="myValue"></span>
    </span>
    <input type="range" id="myRange" max="1000" min="0" style="width:80%"> 
  </div>

  <script type="text/javascript" charset="utf-8">
var myRange = document.querySelector('#myRange');
var myValue = document.querySelector('#myValue');
var myUnits = 'myUnits';
var off = myRange.offsetWidth / (parseInt(myRange.max) - parseInt(myRange.min));
var px =  ((myRange.valueAsNumber - parseInt(myRange.min)) * off) - (myValue.offsetParent.offsetWidth / 2);

  myValue.parentElement.style.left = px + 'px';
  myValue.parentElement.style.top = myRange.offsetHeight + 'px';
  myValue.innerHTML = myRange.value + ' ' + myUnits;

  myRange.oninput =function(){
    let px = ((myRange.valueAsNumber - parseInt(myRange.min)) * off) - (myValue.offsetWidth / 2);
    myValue.innerHTML = myRange.value + ' ' + myUnits;
    myValue.parentElement.style.left = px + 'px';
  };
  </script>

</body>
</html>

请注意,这种类型的 HTML 输入元素有一个隐藏功能,例如当元素具有焦点时,您可以使用左/右/下/上箭头键移动滑块。与 Home/End/PageDown/PageUp 键相同。

于 2016-02-14T11:12:47.117 回答
10

form没有或min外部 JavaScript 的最短版本。

<input type="range" value="0" max="10" oninput="num.value = this.value">
<output id="num">0</output>

解释

如果您想从中检索值,output您通常使用id可以从而oninput不是使用链接的值this.nextElementSibling.value(我们利用我们已经在使用的东西)

将上面的示例与这个有效但更复杂且冗长的答案进行比较:

<input id="num" type="range" value="0" max="100" oninput="this.nextElementSibling.value = this.value">
<output>0</output>

用最短的答案:

  • 我们避免使用this, 在 JS 中对新手来说很奇怪的东西
  • 我们避免在 DOM 中连接兄弟姐妹的新概念
  • input我们避免在中放置过多的id属性output

笔记

  • 在这两个示例中,我们不需要min在等于时添加值 0
  • 删除 JavaScript 的this关键字使其成为更好的语言
于 2020-10-16T17:09:30.627 回答
7

如果您使用多个幻灯片,并且可以使用 jQuery,则可以执行以下操作来轻松处理多个滑块:

function updateRangeInput(elem) {
  $(elem).next().val($(elem).val());
}
input { padding: 8px; border: 1px solid #ddd; color: #555; display: block; }
input[type=text] { width: 100px; }
input[type=range] { width: 400px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="range" min="0" max="100" oninput="updateRangeInput(this)" value="0">
<input type="text" value="0">

<input type="range" min="0" max="100" oninput="updateRangeInput(this)" value="50">
<input type="text" value="50">

此外,通过使用oninputon ,<input type='range'>您将在拖动范围时收到事件。

于 2017-07-20T09:21:16.940 回答
3

对于不关心 jquery 使用的人,这里有一个不使用任何 id 的捷径

<label> userAvatar :
  <input type="range" name="userAvatar" min="1" max="100" value="1"
         onchange="$('~ output', this).val(value)" 
         oninput="$('~ output', this).val(value)">
  <output>1</output>
</label>
于 2019-10-25T01:07:48.617 回答
2

我有一个涉及(Vanilla)JavaScript 的解决方案,但仅作为库。您必须将其包含一次,然后您需要做的就是设置source数字输入的适当属性。

source属性应该是querySelectorAll您要收听的范围输入的选择器。

它甚至适用于 selectcs。它适用于多个听众。它在另一个方向起作用:更改数字输入,范围输入将调整。它将适用于稍后添加到页面上的元素(请查看https://codepen.io/HerrSerker/pen/JzaVQg

在 Chrome、Firefox、Edge 和 IE11 中测试

;(function(){
  
  function emit(target, name) {
    var event
    if (document.createEvent) {
      event = document.createEvent("HTMLEvents");
      event.initEvent(name, true, true);
    } else {
      event = document.createEventObject();
      event.eventType = name;
    }

    event.eventName = name;

    if (document.createEvent) {
      target.dispatchEvent(event);
    } else {
      target.fireEvent("on" + event.eventType, event);
    }    
  }

  var outputsSelector = "input[type=number][source],select[source]";
  
  function onChange(e) {
    var outputs = document.querySelectorAll(outputsSelector)
    for (var index = 0; index < outputs.length; index++) {
      var item = outputs[index]
      var source = document.querySelector(item.getAttribute('source'));
      if (source) {
        if (item === e.target) {
          source.value = item.value
          emit(source, 'input')
          emit(source, 'change')
        }

        if (source === e.target) {
          item.value = source.value
        }
      }
    }
  }
  
  document.addEventListener('change', onChange)
  document.addEventListener('input', onChange)
}());
<div id="div">
  <input name="example" type="range" max="2250000" min="-200000" value="0" step="50000">
  <input id="example-value" type="number" max="2250000" min="-200000" value="0" step="50000" source="[name=example]">
  <br>

  <input name="example2" type="range" max="2240000" min="-160000" value="0" step="50000">
  <input type="number" max="2240000" min="-160000" value="0" step="50000" source="[name=example2]">
  <input type="number" max="2240000" min="-160000" value="0" step="50000" source="[name=example2]">
  <br>
  
  <input name="example3" type="range" max="20" min="0" value="10" step="1">
  <select source="[name=example3]">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
  </select>
  <br>
  
</div>
<br>

于 2019-03-20T12:12:02.410 回答
0

试试这个 :

 <input min="0" max="100" id="when_change_range" type="range">
 <input type="text" id="text_for_show_range">

jQuery部分:

 $('#when_change_range').change(function(){
 document.getElementById('text_for_show_range').value=$(this).val();
  });
于 2020-03-10T10:39:02.937 回答
-1

<form name="registrationForm">
    <input type="range" name="ageInputName" id="ageInputId" value="24" min="1" max="10" onchange="getvalor(this.value);" oninput="ageOutputId.value = ageInputId.value">
    <input type="text" name="ageOutputName" id="ageOutputId"></input>
</form>

于 2016-10-09T17:11:07.423 回答
-3

如果您仍在寻找答案,则可以使用 input type="number" 代替 type="range" min max work 如果它按以下顺序设置:
1-name
2-maxlength
3-size
4-min
5-max
just复制它

<input  name="X" maxlength="3" size="2" min="1" max="100" type="number" />
于 2017-01-18T23:05:11.283 回答