2017-03-02 3 views
2

私は2つの値を加算して値を出力するためにフィドルを作成しました。フィドルはここにある:on()によるJqueryの問題

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

ようにデフォルト値を設定する場合を含める必要があります。 。また、これらのイベントがすべて必要なわけではありません。実際には、すべてのイベントが発生すると、キー操作ごとに複数回ファンクションが発生します。 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); 
     } 
    }); 
}); 

注意すべきいくつかの他の事:あなたがしたい場合がありますメッセージ$(...).number is not a function

    • $('#g8').number(true, 2);エラーアウトをnumbertextではなく)に変更して、#g7に入る値を制限して、英字文字が詰まっていない
  • +0

    あなたの答えに感謝します:) – Zendie

    +1

    心配はいりません。 '$( '#g7').val()'が空/ null/0/etcであれば、4行目にヌル併合演算子が使われていることに気付いたと思います。値を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である場合にのみチェックし、G8 updatigれ

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

    NaNを

    と評価されます。

    #g7が空で、parseFloatは、空の文字列を返すので、その上の加算演算を行うことNaNにつながるときあなたはG7がnullの場合、そしてちょうどゼロ

    +0

    ありがとう、私の答えを編集しました。 parseFloatはヌルと空文字列の両方に対してNaNを返すでしょう – dpix