我有这段代码:
var max1box = document.getElementById('length'),
max2box = document.getElementById('width'),
max1 = 100,
min1 = 20,
max2 = 400,
min2 = 10;
max1box.addEventListener('change', validateValues, false);
max2box.addEventListener('change', validateValues, false);
function validateValues() {
if (this == max1box && this.value > max1 && this.value > max2box.value) {
max1box = max2box;
max2box = this;
document.getElementById("output").innerHTML = "Max1Box is " + max1box.id + ", Max2Box is " + max2box.id;
}
if (max1box.value > max1) {
max1box.value = max1;
}
if (max1box.value < min1) {
max1box.value = min1;
}
if (max2box.value > max2) {
max2box.value = max2;
}
if (max2box.value < min2) {
max2box.value = min2;
}
}
我的想法是,如果我在一个框中键入“300”,那么我应该能够通过在另一个框中键入更高的数字来覆盖它。 不幸的是,代码只读取值的第一个数字。在我的代码中,“25484”的含义不算高于“300”。
怎么回事?
答案 0 :(得分:4)
您希望战略性地使用parseInt()
。例如:
var max2boxVal = parseInt(max2box.value,10);
不要忘记像我上面所做的那样包括基数(10)。未能做到这一点的最大问题是,以“0”开头的值将被假定为八进制。 E.g:
alert(parseInt("010")); //alerts '8'
要获得更好的转化效果,请尝试-0
var max2boxVal = max2box.value - 0;
我更喜欢前者,但因为它更明确,更容易让未来的代码维护者理解。