在父表单中提交/更新带有bootstrap 3模态对话的子记录时,我在更新父表单的计算字段时遇到了一些问题。
我在parent.js
档案中有这个功能:
function update_lineitems_subtotal() {
var qid = $j('[name=SelectedID]').val();
if (!isNaN(qid)) {
$j.ajax({
url: 'hooks/ajax_quote_subtotal.php',
data: {qid: qid},
success: function(data) {
$j('#LineItemsSubtotal').val(data);
$j('#Shipping').keyup();
}
});
} else {
$j('#LineItemsSubtotal').val('0');
$j('#Shipping').keyup();
}
};
这是使用上面的ajax调用运行的ajax_quote_subtotal.php
:
<?php
$currDir = dirname(__FILE__) . '/..';
include("$currDir/defaultLang.php");
include("$currDir/language.php");
include("$currDir/lib.php");
/* grant access to users with access to quotations table */
$od_from = get_sql_from('quotations');
if(!$od_from){
header('HTTP/1.0 401 Unauthorized');
echo "You do not have permission to access this page. If this behaviour is unexpected, please contact the system administrator";
exit;
}
$qid = intval($_REQUEST['qid']);
if(!qid) exit;
$parts_subtotal = sqlValue("select sum(Subtotal) from product_line_items where QuotationID='{$qid}' ");
$service_subtotal = sqlValue("select sum(Subtotal) from service_line_items where QuotationID='{$qid}' ");
$subtotal = $parts_subtotal + $service_subtotal;
sql("update quotations set LineItemsSubtotal='{$subtotal}' where QuotationID='{$qid}' ", $eo);
echo number_format($subtotal, 2);
?>
这是来自child.js
的函数,它在提交表单时关闭模式对话并运行update_lineitems_subtotal
parent.js
函数
if($j('input[name=Embedded]').val()==1){
$j('form').submit(function(){
window.parent.jQuery('.modal').modal('hide');
setTimeout(function(){
parent.update_lineitems_subtotal();
}, 100);
})
}
只要我不删除setTimeout
,这就有效,但我觉得这不是一个好的解决方案。
如果删除setTiemout
,则会创建记录但看起来该函数在提交子记录之前运行,因此父级中的小计字段的值将排除最新添加的记录。
我也试过这个:
if($j('input[name=Embedded]').val()==1){
$j('form').submit(function(e){
e.preventDefault();
this.submit();
window.parent.jQuery('.modal').modal('hide');
parent.update_lineitems_subtotal();
})
}
这在Chrome中有类似的结果,甚至拒绝在Firefox中创建子记录。
任何帮助都将不胜感激。
P.S。我是新手,如果你有时间解释你可能会建议的代码,我将不胜感激。