jQuery与按键相加总是落后一步

时间:2015-02-07 09:44:37

标签: javascript jquery math

我正在尝试创建一个计算器,我希望在每次按键时添加/总和我这样做:

$('#padd').keypress(function() {

    var ypoints = "200";        
    var points = parseInt( $(this).val() );

    console.log( "Points: " + (points + parseInt(ypoints)) );

}); 

我的问题似乎是"点"总是落后一步。让我们说我的" ypoints"是200,我输入第1,console.log说" NaN"?如果我然后输入" 10" console.log说" 201"事实上它应该说" 210"?!?如果我然后添加" 100"在添加字段中它表示" 210"但它应该说" 300"。总是有一个按键背后?!?

我在这里缺少什么,或者这不是正确的方法吗?

任何帮助都表示赞赏,并提前感谢: - )

4 个答案:

答案 0 :(得分:3)

Try using the keyup function instead(尽管您可能根本不想听{4}}事件,请参阅下文):

key*

而不是$('#padd').keyup(function(){ var ypoints = 200; var points = parseInt($(this).val()); console.log("Points: "+(points+ypoints)); }); ,您应该listen for the explicit input event

keyup

使用$('#padd').on("input", function(){ var ypoints = 200; var points = parseInt($(this).val()); console.log("Points: "+(points+ypoints)); }); 收听input事件胜过的示例是using an input of type number。在(not so) modern browser中,这会在输入字段中添加一个步进器,您可以使用鼠标将输入值递增或递减1。这不会触发keyup事件(没有按下任何键)但仍然会更改值。


这实际上是某个事件何时被触发以及当时keyup值的状态。有explanation on quirksmode.org

  

<强> KEYUP

     

当用户释放密钥时触发, 后执行该密钥的默认操作。

以及有关MDNinput事件的更多信息:

  

当更改或元素的值时,会同步触发DOM输入事件。

答案 1 :(得分:1)

试试这个,它是一个有效的代码:Fiddle

$('#padd').keyup(function(){
        var ypoints = "200";        
        var points = parseInt($(this).val());
        alert("Points: "+(points+parseInt(ypoints)));
 }); 

答案 2 :(得分:0)

  Problem in ParseInt function.
  try this Code:

    $('#padd').keypress(function(){

    var ypoints = "200";        
    var points = parseInt($(this).val());

    console.log("Points: "+parseInt(ypoints+points));

}); 

答案 3 :(得分:0)

您也可以这样编码......

    function GetTextboxAmount(obj) {

        var retVal = 0;

        try {
            if (obj.val() == "") {
                retVal = 0;
            } else if (obj.val() == '') {
                retVal = 0;
            } else if (isNaN(parseFloat(obj.val()))) {
                retVal = 0;
            } else {
                retVal = Math.round(parseFloat(obj.val()));
            }

        } catch (e) { retVal = 0; }
        obj.val(retVal);
        return retVal;
    }

$('#padd').keyup(function(){

    var ypoints = "200";        
    var points = GetTextboxAmount($(this));

    console.log("Points: "+(points+parseInt(ypoints)));

});