2017-03-02 74 views
2

我已经创建了一个小提琴来添加两个值并输出值。小提琴是在这里:jquery问题on()

http://jsfiddle.net/Q8KVC/2215/

当我输入值输入框(G7),价值增加了​​G8和显示输出。但是,当我使用退格删除输入框中的值时,G8中的值不会更改为默认值(0)。我曾尝试过.on().bind()。但没有运气。请帮我找出问题。

我使用了以下事件:

$("#g7").on("input keyup keydown keypress change blur", function() {}); 

感谢。

+0

将代码添加到OP而不仅仅是一个外部链接..用于演示使用'''' – guradio

+0

问题不在于'.on()',它与您的事件中的代码处理程序。 – nnnnnn

回答

1

#g7是空的,parseFloat返回一个空字符串,这样的加法运算,在NaN结果。此外,您不需要所有这些事件,事实上,所有这些事件都意味着您的功能每按键一次就会触发多次。 keyup事件应该足够了,除非该输入字段在外部更新,在这种情况下,您也可以使用change事件。尽管如此,如果您正在进行外部更新,我会优先选择$('#g7').trigger('keyup');来手动触发事件来强制执行更新。

尝试为您的jQuery的代码,它似乎很好地工作:

$(document).ready(function() { 
    $("#g7").on("keyup", function() { 
     var g6 =$('#g6').text(); 
     var g7 =$('#g7').val() || 0; 
     var g8 =$('#g8').text(); 

     var noCommasg6 = $('#g6').text().replace(/,/g, ''), 
     asANumber = +noCommasg6; 

     var sum=parseFloat(noCommasg6)+parseFloat(g7); 
     if (!isNaN(sum)) 
     { 
      $("#g8").text(sum); 
      $('#g8').number(true, 2); 
     } 
    }); 
}); 

一些其他的事情需要注意:

  • $('#g8').number(true, 2);错误出与消息$(...).number is not a function
  • 您可能要通过将HTML input type="..."更改为number(而不是text)来限制可进入#g7的值,以便字母字符不会蠕变
+0

感谢您的回答:) – Zendie

+1

无后顾之忧。我不认为我注意到我做了什么,它在第4行使用了空合并运算符,这意味着如果$('#g7')。val()'为空/空/ 0/etc,那么它默认值为0.这是创建默认的一种快速而简单的方法,有更强大的方法,但这应该足以满足您的要求。 –

0

编辑:无视答案。我不知道input的确是有效的。

看着jQuery API Documentation,input不是有效的事件类型。也许看到一种无法识别的类型会导致其余的放弃?

+1

'input'与jQuery一起工作(只要浏览器支持它,所有现代的都可以),但jQuery没有快捷方式'。input()'方法为它绑定处理程序。使用'.on(“input”)'很好。 – nnnnnn

+0

注意。我不知道这是一个有效的事件类型。谢谢。 – Gwellin

1

当您删除输入字段中的所有字符时,该值将变为空字符串。

var sum=parseFloat(noCommasg6)+parseFloat(g7);

解析漂浮在这条线将评估为NaN

if (!isNaN(sum)) 
       { 
        $("#g8").text(sum); 
        $('#g8').number(true, 2); 
       } 

然后要检查和updatig G8只有当它是NaN。

您将需要包括的情况下,如果G7为null,则只需设置的默认值是零

+0

谢谢,编辑我的答案。 parseFloat无论如何都会返回NaN空字符串和空字符串 – dpix