当您在一种情况下使用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/