【发布时间】:2014-03-07 17:18:21
【问题描述】:
有关下述问题的演示,请参阅JSFiddle
HTML:
<input type="range" id="slider_length" min="10" max="200" value="0" step="10" onchange="changeValue1();" />
<span id="slider_length_span">10 mm</span>
</br>
<input type="range" id="slider_length2" min="5" max="15" value="0" step="10" onchange="changeValue2();" />
<span id="slider_length2_span">5 mm</span>
JS:
window.changeValue1 = function()
{
var slider = document.getElementById("slider_length");
var span = document.getElementById("slider_length_span");
span.innerHTML = slider.value + " mm";
var slider2 = document.getElementById("slider_length2");
slider2.setAttribute("max", slider.value - 5);
}
window.changeValue2 = function()
{
var slider = document.getElementById("slider_length2");
var span = document.getElementById("slider_length2_span");
span.innerHTML = slider.value + " mm";
}
我有一个范围元素,用户可以在其中选择 10 到 200 之间的值,步长为 10。
第二个范围元素的值在 5 到 15 之间,步长为 10。
如果用户更改了第一个范围元素,onchange 事件将被触发(成功),其中第二个范围元素的“max”属性被更改(通过第一个元素的值 -5)。到目前为止,这工作正常。
重现问题的步骤:
- 在第一个范围元素上选择任意数字(例如 150)
- 在第二个范围元素上选择可能的最大数字(例如 145)
- 减少第一个范围元素上的选定数字(例如 150 -> 110)
预期行为:
当第一个范围元素的 onchange 事件被触发时,第二个范围元素的“max”属性变为 105。第二个范围元素的值仍然是 145,应该达到 105(可能的最高值)。因为第二个范围元素发生了变化,所以触发了 onchange 事件,更新了一个显示其值的 span 元素。
实际行为:
当第二个范围元素的“max”属性发生变化时,onchange 事件似乎不会触发。
问题:为什么 onchange 事件没有触发?如果 onchange 事件不是在这种情况下使用的正确事件,我应该使用哪个事件?
【问题讨论】:
-
当通过脚本更改值时,更改事件根本不会触发。一种解决方案是也从脚本中触发事件(但使用更复杂的事件处理方法可以更轻松地完成)。
标签: javascript html events