0

許してください、でも私はJavascriptを学び始めたばかりです。2つの入力フィールドの合計を取得しようとしていますが、キーアップイベントごとに、いわば「ライブ」で結果を更新したいと思います。

現時点では、入力フィールドに値を入力すると、結果フィールドが消えます。

私は何が間違っているのですか?

どうもありがとう、

ピーター

編集:私はどれほど愚かで、コードを投稿するのを忘れました

http://jsfiddle.net/u7VwP/

var inputFirst = $('#first'),
    inputSecond = $('#second'),
    inputFirstVal = inputFirst.val(),
    inputSecondVal = inputSecond.val();

function getResult(first, second) {
 var result = first + second;
 $('p#result').text(result);
};


inputFirst.on('keyup', function() {
 getResult(inputFirstVal, inputSecondVal);
});
inputSecond.on('keyup', function() {
 getResult(inputFirstVal, inputSecondVal);
});​
4

5 に答える 5

1
inputFirstVal = inputFirst.val(),
inputSecondVal = inputSecond.val();

これらの変数は一度だけ初期化されます。val()現在の値を読みたい正確な瞬間に呼び出す必要があります。

http://jsfiddle.net/u7VwP/7/を参照してください

更新:parseInt文字列ではなく数字を追加するように追加されました。

次の構文に注意してください。

first = parseInt(first) || 0;

の結果parseIntが偽である場合 (数値を解析できない場合の「数値ではない」、またはリテラル 0 など)、値はデフォルトで演算子NaNの右側の0 になります。||

于 2012-11-16T13:00:17.503 に答える
0
var inputFirst = $('#first'),
    inputSecond = $('#second'),
    inputFirstVal = inputFirst.val(),
    inputSecondVal = inputSecond.val();

function getResult(first, second) {
    var result = (parseInt(first) || 0) + (parseInt(second) || 0);
    //field.val() returns strings not numbers so parsing to ints. If letter is passed, consider it as 0
    $('p#result').text(result);
};

function handler()
{
  getResult(inputFirst.val() || 0, inputSecond.val() || 0); 
  // if value is null or undefined pass 0 to the function
}

inputFirst.on('keyup', handler);
inputSecond.on('keyup', handler);​
于 2012-11-16T13:03:55.477 に答える
0

私のコメントによると、getResult関数は次のように終了します。

function getResult() {
 inputFirstVal = inputFirst.val(),
 inputSecondVal = inputSecond.val();
 var result = inputFirstVal  + inputSecondVal ;
 $('p#result').text(result);
};

変更時と同様に、関数を呼び出すだけです。

inputFirst.on('keyup', getResult);
inputSecond.on('keyup', getResult);
于 2012-11-16T13:02:32.587 に答える
0
var inputFirst = $('#first'),
    inputSecond = $('#second');

function getResult() {
    var result = (parseInt(inputFirst.val()) || 0) + (parseInt(inputSecond.val()) || 0);
    $('#result').text(result);
};

inputFirst.on('keyup', function() {
    getResult();
});
inputSecond.on('keyup', function() {
    getResult();
});​
于 2012-11-16T13:08:20.247 に答える
0

Javascript コードのランタイムについて読んで考える必要があります。あなたの例では、入力フィールドが空のときに変数が読み取られます。そのため、それらは常に空になります。それらを一緒に追加する関数でそれらを読み取る必要があります。

さらに、jQuery セレクターを確認することをお勧めします。次のコードでは、2 つのオブジェクトに対してバインドが行われます。

$(document).ready(function() {
    $('#first, #second').bind('keyup', function() {
        $('#result').val($('#first').val() + $('#second').val());
    });
});
于 2012-11-16T13:16:39.807 に答える