JS - 检测用户何时清除字段
JS - Detect when a user clears a field
我正在为我当前的 Web 项目创建一个计算器,它工作得很好,但是当我使用它时,我注意到清除第三个字段导致脚本输出 NaN。
我是 Javascript 的新手,我尝试过
if($('#field11').val() == '' || $('#field12').val() == '' || $('#field13').val() == ''){
$('#result1').text('')
}
但这并不能解决问题。我一直在寻找解决这个问题的方法,但好像互联网上没有人遇到过这样的问题!如果清除了任何一个输入,我需要能够清除输出 (#result1)。
这是我的完整代码:
$(document).ready(function(){
$('#field11').keyup(function(){
if($('#field12').val() != '' && $('#field13').val() != ''){
$('#result1').text(commafy(Math.round( $('#field11').val() + $('#field12').val() / $('#field13').val() * 1.5)) + ",99");
}
});
$('#field12').keyup(function(){
if($('#field11').val() != '' && $('#field13').val() != ''){
$('#result1').text(commafy(Math.round( $('#field11').val() + $('#field12').val() / $('#field13').val() * 1.5)) + ",99");
}
});
$('#field13').keyup(function(){
if($('#field11').val() != '' && $('#field12').val() != ''){
$('#result1').text(commafy(Math.round( $('#field11').val() + $('#field12').val() / $('#field13').val() * 1.5)) + ",99");
}
});
if($('#field11').val() == '' || $('#field12').val() == '' || $('#field13').val() == ''){
$('#result1').text('')
}
});
这是 JSFiddle 上的工作代码:https://jsfiddle.net/x7a91bnx/
谢谢!
您可以使用 DRY 原则来改进您的逻辑。由于所有 keyup
处理程序都执行相同的逻辑,您可以将其提取到它自己的函数中。然后在该函数中,您可以检索每个字段的值,如果它为空,则将其设置为 0
。您还可以在进行计算之前检查 #field13
是否有值,以避免被零除的问题。另请注意,commafy()
函数也可以简化。
试试这个:
$(document).ready(function () {
$('#field11, #field12, #field13').keyup(calculate);
});
function commafy(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}
function calculate() {
var field11 = parseFloat($('#field11').val()) || 0;
var field12 = parseFloat($('#field12').val()) || 0;
var field13 = parseFloat($('#field13').val()) || 0;
var result = field13 == 0 ? 0 : commafy(Math.round(field11 + field12 / field13 * 1.5)) + ",99";
$('#result1').text(result);
}
您检查每个输入的直觉是正确的,但您必须在计算开始之前每次都检查一次,而不是在加载文档后检查一次。例如:
$('#field13').keyup(function () {
if ($('#field11').val() !== '' || $('#field12').val() !== '' || $('#field13').val() !== '') {
$('#result1').text(commafy(Math.round(parseFloat($('#field11').val()) + parseFloat($('#field12').val()) / parseFloat($('#field13').val()) * 1.5)) + ",99");
} else {
$('#result1').text('');
}
});
我正在为我当前的 Web 项目创建一个计算器,它工作得很好,但是当我使用它时,我注意到清除第三个字段导致脚本输出 NaN。
我是 Javascript 的新手,我尝试过
if($('#field11').val() == '' || $('#field12').val() == '' || $('#field13').val() == ''){
$('#result1').text('')
}
但这并不能解决问题。我一直在寻找解决这个问题的方法,但好像互联网上没有人遇到过这样的问题!如果清除了任何一个输入,我需要能够清除输出 (#result1)。
这是我的完整代码:
$(document).ready(function(){
$('#field11').keyup(function(){
if($('#field12').val() != '' && $('#field13').val() != ''){
$('#result1').text(commafy(Math.round( $('#field11').val() + $('#field12').val() / $('#field13').val() * 1.5)) + ",99");
}
});
$('#field12').keyup(function(){
if($('#field11').val() != '' && $('#field13').val() != ''){
$('#result1').text(commafy(Math.round( $('#field11').val() + $('#field12').val() / $('#field13').val() * 1.5)) + ",99");
}
});
$('#field13').keyup(function(){
if($('#field11').val() != '' && $('#field12').val() != ''){
$('#result1').text(commafy(Math.round( $('#field11').val() + $('#field12').val() / $('#field13').val() * 1.5)) + ",99");
}
});
if($('#field11').val() == '' || $('#field12').val() == '' || $('#field13').val() == ''){
$('#result1').text('')
}
});
这是 JSFiddle 上的工作代码:https://jsfiddle.net/x7a91bnx/
谢谢!
您可以使用 DRY 原则来改进您的逻辑。由于所有 keyup
处理程序都执行相同的逻辑,您可以将其提取到它自己的函数中。然后在该函数中,您可以检索每个字段的值,如果它为空,则将其设置为 0
。您还可以在进行计算之前检查 #field13
是否有值,以避免被零除的问题。另请注意,commafy()
函数也可以简化。
试试这个:
$(document).ready(function () {
$('#field11, #field12, #field13').keyup(calculate);
});
function commafy(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}
function calculate() {
var field11 = parseFloat($('#field11').val()) || 0;
var field12 = parseFloat($('#field12').val()) || 0;
var field13 = parseFloat($('#field13').val()) || 0;
var result = field13 == 0 ? 0 : commafy(Math.round(field11 + field12 / field13 * 1.5)) + ",99";
$('#result1').text(result);
}
您检查每个输入的直觉是正确的,但您必须在计算开始之前每次都检查一次,而不是在加载文档后检查一次。例如:
$('#field13').keyup(function () {
if ($('#field11').val() !== '' || $('#field12').val() !== '' || $('#field13').val() !== '') {
$('#result1').text(commafy(Math.round(parseFloat($('#field11').val()) + parseFloat($('#field12').val()) / parseFloat($('#field13').val()) * 1.5)) + ",99");
} else {
$('#result1').text('');
}
});