解决方案
<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将其放入元素中以进行显示。sumresultinnerHTMLsumresultdocument.getElementById