3

我编写了一个简单的 JavaScript 来解决加法问题(1 + 1 OR 1 + 5 + 2 + 9 等)。它工作正常。

问题是我希望它在输入新值时连续运行。一旦我输入“1 + 1”,它应该显示 2,如果我继续输入并输入“+ 1”,它应该显示 3,依此类推。

连续运行的部分有点工作。如果我输入“1 + 1”,则在按下空格键之前不会显示总和 --- 但它应该立即显示 2 而无需按下空格键。我错过了什么?

小提琴:http: //jsfiddle.net/z26eg/

HTML

<textarea cols="50" rows="10" id="addThis"></textarea>
<div id="sum"></div>

JavaScript

var input = document.getElementById("addThis");

input.onkeypress = function() {
    var finalAnswer = 0;

    // Get form input
    var processAddThis = addThis.value;

    // Remove all spaces in problem
    // Example problem: 10 +    3   + 2
    processAddThis = processAddThis.replace(/\s/g,''); // 10+3+2

    // Split numbers into an array
    var addTheseValues = processAddThis.split("+");

    // Go through numbers and add them up
    for (var i = 0; i < addTheseValues.length; i++) {
        finalAnswer += Number(addTheseValues[i]);
    }

    // Display sum
    sum.innerHTML = finalAnswer;
}
4

3 回答 3

3

你应该使用 onkeyup代替:

http://jsfiddle.net/z26eg/1/

input.onkeyup = function() {
    .....
};
于 2013-09-07T07:01:04.703 回答
2

尝试“onkeyup”事件。这个对我有用。

于 2013-09-07T07:00:18.827 回答
2

onkeyup你应该像下面这样调用函数:

input.onkeyup = function() {
    /* The rest of your current code as it already works fine */
};

keydown事件在按键被按下时发生,紧随其后的是keypress事件。在这两次期间,已按下的键的值仍然不可用于计算。

然后在keyup释放键时生成事件。此时,已按下的键的值可用于计算。

这个 fiddle中,输入任何值textarea并查看控制台以查看三个事件之间的差异。

于 2013-09-07T07:13:48.703 回答