读取文本而不是数字的值

时间:2011-06-24 08:25:21

标签: javascript

我有这段代码:

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;
    }
}

http://jsfiddle.net/ew58v/

我的想法是,如果我在一个框中键入“300”,那么我应该能够通过在另一个框中键入更高的数字来覆盖它。 不幸的是,代码只读取值的第一个数字。在我的代码中,“25484”的含义不算高于“300”。

怎么回事?

1 个答案:

答案 0 :(得分:4)

您希望战略性地使用parseInt()。例如:

var max2boxVal = parseInt(max2box.value,10);

不要忘记像我上面所做的那样包括基数(10)。未能做到这一点的最大问题是,以“0”开头的值将被假定为八进制。 E.g:

alert(parseInt("010")); //alerts '8'

要获得更好的转化效果,请尝试-0

var max2boxVal = max2box.value - 0;

(根据this Stackoverflow post

我更喜欢前者,但因为它更明确,更容易让未来的代码维护者理解。