为了账号安全,请及时绑定邮箱和手机立即绑定

动态添加带值的输入滑块

动态添加带值的输入滑块

ITMISS 2021-12-02 16:48:39
我的目标是能够通过 javascript 将范围输入动态添加到网页上。我正在为滑块使用以下代码<div class="slidecontainer">    <input type="range" min="1" max="100" value="50" class="slider" id="myRange">    <p>Value: <span id="demo"></span></p></div><script>    var slider = document.getElementById("myRange");    var output = document.getElementById("demo");    output.innerHTML = slider.value;    slider.oninput = function() {        output.innerHTML = this.value;    }</script>https://www.w3schools.com/howto/howto_js_rangeslider.asp我曾尝试使用 innerHtml、document.createElement("input") 和模板来实现这一点。我能够绘制滑块,但是我无法获得要打印的值并显示有关如何实现此目标的任何帮助将不胜感激。这是我最近的尝试脚本function showContent() {  var temp = document.getElementsByTagName("template")[0];  var clon = temp.content.cloneNode(true);  document.body.appendChild(clon);}Template.myTemplate.rendered = function(){document.getElementById("slider").oninput = function() {    myFunction()};function myFunction() {   var val = document.getElementById("slider").value //gets the oninput value   document.getElementById('output').innerHTML = val //displays this value to the html page   console.log(val)}</script><template name="myTemplate"> <input id="slider" type="range" min="50" max="100" step="10"  value="50"> <output id="output">abc</output></template><button class = "button" onclick="showContent()">Copy text</button>由于 MMDM,我也尝试了这个,这导致显示了 3 个范围绘图和 3 个值,但是,它们没有更新。<script>window.onload = function() {var titles = ["demo1", "demo2", "demo3"];for(var i = 0; i < 3; i++){  var container = document.getElementsByClassName('slidecontainer')[0];  var slider = document.createElement("input");  slider.type = 'range';  slider.value = 50;  container.prepend(slider);  container.innerHTML += ("<p>Value: <span id=" + titles[i] +"></span></p>")  var output = document.getElementById(titles[i]);  output.innerHTML = slider.value;  slider.oninput = function() {    output.innerHTML = this.value;  }}}</script><div class="slidecontainer"></div>
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可以执行以下操作:


window.onload = function() {

  var container = document.getElementsByClassName('slidecontainer')[0];

  var slider = document.createElement("input");

  slider.type = 'range';

  slider.value = 56;

  container.prepend(slider);


  var output = document.getElementById("demo");

  output.innerHTML = slider.value;


  slider.oninput = function() {

    output.innerHTML = this.value;

  }

}

<div class="slidecontainer">

  <p>Value: <span id="demo"></span></p>

</div>

当心!您必须将创建的元素添加到容器中,否则那里没有元素。有关更高级的onload方法,请参阅此主题


我希望它有帮助:)


编辑:


我认为您必须在 for 循环之外附加事件并指定哪个元素必须具有什么功能。我用下面的代码片段来做到这一点:


window.onload = function() {

  function addClass(element, class_name) {

    arr = element.className.split(" ");

    if (arr.indexOf(name) == -1) {

      element.className += " " + class_name;

    }

  }


  var titles = ["demo1", "demo2", "demo3"];


  for (var i = 0; i < titles.length; i++) {

    var container = document.getElementsByClassName('slidecontainer')[0];

    var slider = document.createElement("input");

    slider.type = 'range';

    slider.value = Math.random() * 100;

    slider.setAttribute('data-lable-id', titles[i]);

    addClass(slider, 'range-sliders');

    container.prepend(slider);

    container.innerHTML += ("<p>Value: <span id=" + titles[i] + "></span></p>")


    var output = document.getElementById(titles[i]);

    output.innerHTML = slider.value;

  }


  var sliders = document.getElementsByClassName('range-sliders');

  var i;

  for (i = 0; i < sliders.length; i++) {

    (function(i) {

      var lbl_id = sliders[i].getAttribute('data-lable-id');

      if (lbl_id) {

        sliders[i].oninput = function() {

          document.getElementById(lbl_id).innerHTML = this.value;

        };

      }

    })(i);

  }

}

<div class="slidecontainer">


</div>


查看完整回答
反对 回复 2021-12-02
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

在添加事件侦听器之前等待窗口加载


 window.onload = function() {

   var slider = document.getElementById("myRange");

   var output = document.getElementById("demo");

   output.innerHTML = slider.value;


   slider.oninput = function() {

     output.innerHTML = this.value;

   }

 }


查看完整回答
反对 回复 2021-12-02
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

根据您的编辑,这是您的答案:


window.onload = function() {

  document.querySelectorAll(".slidecontainer").forEach(function(element) {

    var slider = [...element.children].filter(x=> x.tagName == "INPUT")[0];

    var output = [...element.children].filter(x=> x.tagName == "P")[0];

    slider.oninput = function() {

      output.innerHTML = this.value;

    }

  });


}

代码会找到每个有类的 divslidecontainer并且它会取第一个输入和第一个 p 元素,其余的代码是一样的


更好的代码和 div 是:


<div class="slidecontainer">

    <input class="slider" type="range" min="1" max="100" value="50" class="slider" id="myRange">

    <br>  

    <span>Value:</span><span class="slider-value"></span>

</div>


<script>

window.onload = function() {

  document.querySelectorAll(".slidecontainer").forEach(function(element) {

    var slider = [...element.children].filter(x=> x.className == "slider")[0];

    var output = [...element.children].filter(x=> x.className == "slider-value")[0];

    slider.oninput = function() {

      output.innerHTML = this.value;

    }

  });

}

</script>

此代码将查找slidecontainerdiv 并检查具有slider类的输入并将输入值写入具有slider-value类的元素


查看完整回答
反对 回复 2021-12-02
  • 3 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信