あるケースではparseInt()を使用しましたが、同様の状況で同じパスをたどらなかったのはなぜですか?
とにかく、これが私があなたのコードをどのように修正したかです:
$(document).ready(function () {
$('input#bill, input#tip').blur(function () {
var num = parseFloat($(this).val());
if (isNaN(num)) {
return;
}
var cleanNum = num.toFixed(2);
$(this).val(cleanNum);
if (num / cleanNum < 1) {}
});
$('#people, #bill, #tip').keyup(function () {
updateTotal();
});
var updateTotal = function () {
var people = parseInt($('#people').val());
if (isNaN(people) || people === 0) {
return;
}
var bill = parseFloat($('#bill').val());
if (isNaN(bill)) {
bill = 0;
}
var tip = parseFloat($('#tip').val());
if (isNaN(tip)) {
tip = 0;
}
var billTip = bill + tip;
var billTipPeople = billTip / people;
$('#total').text("£" + billTipPeople);
// round up to 2 d.p. like below:
// $('#total').text("£" + billTipPeople.toFixed(2));
};
});
もう一度戻ってきて、アプリが別のクレイジーな動作をすることにした理由を尋ねるのを防ぐために、次のチェックを追加しました。
ユーザーが人数を入力すると、請求書の合計金額を入力する準備ができていないにもかかわらず、NaN として更新されます。この厄介な動作を防止するには...
if (isNaN(num)) {
return;
}
updateTotal()関数でも同じ予防措置を講じます。さらに、0 による除算に注意してください!*私はガールフレンドと一緒にいるときにのみヒントを提供します。そうしないと、私のような人がアプリを壊してしまいます...
if (isNaN(people) || people === 0) {
return;
}
これがフィドルです>> http://jsfiddle.net/a8eJT/11/