解决方案
<script>
var update = function() {
var sum =
Array.prototype.slice.call(
document.getElementsByClassName("rangefield")
).reduce(
function (a, b) {
return a + Number(b.value);
},
0
);
document.getElementById("sumresult").innerHTML = sum;
};
</script>
<input type="range" class="rangefield" onchange="update()" onkeyup="update()">
<input type="range" class="rangefield" onchange="update()" onkeyup="update()">
<input type="range" class="rangefield" onchange="update()" onkeyup="update()">
<div id="sumresult"></div>
JSFiddle:http: //jsfiddle.net/ysangkok/nVNjk/1/
这个怎么运作
- 当一个字段被更新时,该
update()
函数被调用
- 更新函数由两个语句组成。我将按照执行的顺序向您介绍他们的执行过程。
document.getElementsByClassName
被调用并返回一个HTMLCollection
. 此集合不是数组。
- 因为我想要一个数组,所以我
HTMLCollection
使用Array.prototype.slice.call
.
- 现在我有了一个
Array
,我称它为reduce 成员,它允许我遍历元素并将状态从调用传递到它所需要的函数的调用。
- 我提供的 reduce 参数是:为每个值调用的函数和初始值 (0)。
- 该函数将被调用三次,首先是第一个范围输入 as
a
和 0 as b
。然后它将返回范围输入的值与 0 之和,即查看 1 个元素后的中间和。以下对匿名函数的调用会将中间和与其他两个输入字段的值相加。
- 现在已经分配了变量,我们通过分配ID 为(使用检索)的元素的属性
sum
将其放入元素中以进行显示。sumresult
innerHTML
sumresult
document.getElementById