在模态对话框中提交/更新子记录后更新父记录中的计算字段

时间:2016-09-11 23:42:43

标签: javascript php jquery ajax twitter-bootstrap

在父表单中提交/更新带有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。我是新手,如果你有时间解释你可能会建议的代码,我将不胜感激。

0 个答案:

没有答案