Html/Js 在 div 中动态加载的输入范围对象不起作用

Html/Js Input range object dynamically loaded inside a div don't works

你好,我有一个隐藏的 div,里面有一个范围:

<div id="hiddencontainer" style="display:none;">
  <input id="range1" type="range" min="1" max="10" step="1" name="rating"   value="1" onmousemove="showrangevalue()"/>
</div>

这个范围在直接显示时工作正常,但我需要隐藏这个范围并在用户单击特定按钮时显示它。

问题是用户点击"showing range"按钮后,显示范围但无法读取他的值。

jsbin上的demo和完整代码: http://jsbin.com/voyilovuya/3/

HTML

<div id="hiddencontainer" style="display:none;"><!-- try without display none -->
  <input id="range1" type="range" min="1" max="10" step="1" name="rating" value="1" onmousemove="showrangevalue()"/>
</div>
<div id="container">

</div>
<div id="value">

</div>

<input type="button" value="Afficher" onClick="showhiddencontainer()"></input>

JS

function showrangevalue(){
  document.getElementById("value").innerHTML=document.getElementById("range1").value;

}
function showhiddencontainer(){
  document.getElementById("container").innerHTML=document.getElementById("hiddencontainer").innerHTML;
}

你有解决办法吗?谢谢你的帮助!

看到这个 http://jsfiddle.net/g03srawu/1/

您正在复制 container 中的 range 元素,因此有两个具有相同 ID 的范围输入,

这将显示 .value div 中隐藏元素中的值。替换成class,然后就可以使用了

HTML:

<div id="hiddencontainer" style="display:none;"><!-- try without display none -->
  <input class="range1" type="range" min="1" max="10" step="1" name="rating" value="1" onmousemove="showrangevalue()"/>
</div>
<div id="container">

</div>
value:
<div id="value">

</div>

<input type="button" value="Showing range" onClick="showhiddencontainer()"></input>

JS:

function showrangevalue(){
  document.getElementById("value").innerHTML=document.querySelectorAll(".range1")[1].value;

}
function showhiddencontainer(){
  document.getElementById("container").innerHTML=document.getElementById("hiddencontainer").innerHTML;
}

尝试替换

function showhiddencontainer(){
  document.getElementById("container").innerHTML=
  document.getElementById("hiddencontainer").innerHTML;
}

function showhiddencontainer(){
    document.getElementById("hiddencontainer").style.display = "block"; 
}

除非你有理由复制你的容器?