JQuery/JavaScript:遍历表单字段,执行计算,然后提交
JQuery/JavaScript: Iterate through form fields, perform calculation, then submit
现在我的代码非常"硬编码"且重复。我想知道是否有更清洁的方法来做以下事情。理想情况下,我想用一个循环迭代我的表单字段,并用一条语句计算结果,但我很难找到最好的方法
摘要:我有十个表单字段,每个字段都有一个不同的十进制值,用户可以提供也可以不提供。当用户点击提交时,它应该在当前HTML页面上显示的值的输入字段中添加值,然后插入到DB中。
首先,我从表单输入字段中获取该值,并将其转换为具有两个小数位的数字。然后,我从HTML中获取当前的总数,并将这两个数字相加。之后,我将总数注入表单输入字段,以便将其存储在$_POST
中并插入到数据库中。
我怎样才能使我的代码更干燥(即不要重复自己)?以下只是两个例子,但除了元素调用之外,它们完全相同:
var subtotal = Number($("#housing").val());
subtotal = (subtotal).toFixed(2);
var currentTotal = $('#output-housing').html().replace("$", "");
var total = Number(subtotal) + Number(currentTotal);
$('#housing').val(total);
var subtotal = Number($("#utilities").val());
subtotal = (subtotal).toFixed(2);
var currentTotal = $('#output-utilities').html().replace("$", "");
var total = Number(subtotal) + Number(currentTotal);
$('#utilities').val(total);
我想像这样迭代我的输入字段,但我正试图弄清楚如何显示里面的逻辑:
var input = $('.form-expenses :input');
input.each(function() {
// Insert switch statement here?? Some other construct??
});
HTML:(使用引导程序3类)
形式:
<form class="form-expenses form-horizontal" role="form" method="post" action="/profile/update">
<div class="form-group">
<label for="housing" class="control-label col-sm-3">Housing</label>
<div class="input-group input-group-lg col-sm-9">
<span class="input-group-addon">$</span>
<input type="text" class="form-control" name="housing" id="housing" />
</div>
</div>
<div class="form-group">
<label for="utilities" class="control-label col-sm-3">Utilities</label>
<div class="input-group input-group-lg col-sm-9">
<span class="input-group-addon">$</span>
<input type="text" class="form-control" name="utilities" id="utilities" />
</div>
</div>
...
<button class="btn btn-lg btn-primary btn-block" id="update-expenses" type="submit"> Update</button>
</form>
输出:
<tr>
<td>Housing</td>
<td id="output-housing">$<?php echo $total['housing']?></td>
</tr>
<tr>
<td>Utilities</td>
<td id="output-utilities">$<?php echo $total['utilities']?></td>
</tr>
这样的东西应该可以工作。假设输出/输入ID的具有相同的前缀关系
$(function() {
$('form.form-expenses').submit(function() {
updateValues();
return false/* prevent submit for demo only*/
})
})
function updateValues(){
$('.form-expenses :input').not('#update-expenses').each(function(){
var $input=$(this), inputId=this.id;
var curr=$('#output-'+inputId).text().replace("$", "");
$input.val(function(i,val){
return (1*(val ||0) + 1*curr).toFixed(2);
})
});
}
演示
从UI的角度来看,更改用户刚刚输入的值似乎非常违背直觉。
要创建ajax数据对象而不是更新显示值:
function getAjaxData(){
var ajaxData={}
$('.form-expenses :input').not('#update-expenses').each(function(){
var $input=$(this), inputId=this.id;
var curr=$('#output-'+inputId).text().replace("$", "");
ajaxData[this.name] =(1*(val ||0) + 1*curr).toFixed(2);
});
return ajaxData
}
/* in submit handler*/
$.post('path/to/server', getAjaxData(), function(response){/*do something with reponse*/})
"如果我允许用户添加/删除字段,那么这可能会有点棘手"
在这种情况下,为字段指定一个类名。只要添加的字段中存在这种情况,它们都将被计算出来。
<input type="text" class="form-control calculate-me" name="housing" id="housing" />
并使用它们的id作为参考对所有内容进行迭代
$(".calculate-me").each(function(){
var ref=this.id;
var subtotal = Number($("#" + ref).val());
subtotal = (subtotal).toFixed(2);
var currentTotal = $('#output-' + ref).html().replace("$", "");
var total = Number(subtotal) + Number(currentTotal);
$('#' + ref).val(total);
});
相关文章:
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- NumericTextBox-当用户键入数字时执行JS计算.能做到吗
- 对表单输入执行计算
- JQuery/JavaScript:遍历表单字段,执行计算,然后提交
- 如何使用文本下拉列表中的绑定值来执行计算
- 使挖空计算订阅不在初始执行路径中的可观察量
- JavaScript.为字母分配数字值,并根据用户的字母输入执行计算
- 使用表单数据执行计算并将其解析回表单
- 如何使用 CheckBox=“true” 执行计算
- 未执行计算可观察量
- 通过json对数据执行计算
- 从<td>对行id指定的同一表行执行计算
- aws lambda函数如何使用响应来执行计算
- 服务器级SDK,可以加载PDF文件并执行计算和验证代码片段
- 接受用户输入,在javascript中执行计算
- 在Javascript中对Integer数组执行计算
- 如何对javascript对象的属性执行计算并将其打印出来
- 对动态添加的行执行计算
- jQuery获取两个不同滑块的值并执行计算
- JavaScript:哪台机器执行计算