首页
  • 问答
  • 教程
  • 书籍
  • IT新闻
  • 如何在一个页面中处理多个表单

    我正在像下面这样工作

    <div id="first_div">
         <form name='invoice_edit' id='invoice_edit' action='forms_invoice.php' method='post'>
         <table border="0">
          <tr>
             <td  id=customers_title_td >Customer</td>
             <td  id=customers_td > <!-- php code for customer list //-->
             </td>
         </tr>
        </table>
        <input type="submit" value="get" />
        </form>
    </div>
    <div id="second_div">
     <form name='customers_edit' id='customers_edit' action='forms_customer.php' method='post'>
    <table>  
     <tr>
            <td >Name</td>
            <td ><input name="customers_name" type="text" value=""  id="customers_name"></td>
    </tr>  
    <tr>
     <td >Bill To</td>
     <td ><input  name="customers_billto_addr" type="text"  value="" id="customers_billto_addr"></td>
    

    </table>
      <input type="button" onClick="goCustomerUpdate('I');" value="  Create  " name="Insert" /> 
        </form>
     </div>
    

    左侧Div(first_div)包含发票数据,右侧Div(second_div)用于显示更多信息或更新,如显示客户信息或者如果是新客户,则创建新客户数据。

    我想要做的是在提交新的客户信息时,我希望在提交右侧客户表格时左侧div保持不变,并且在创建客户日志后,更新左侧div(发票)中的客户列表(下拉)

    我不知道的部分是“我要提交到一个页面(forms_customer.php)还是有一种方法来包装second_div中的所有元素,并用jquery发送它们,也许使用post方法?


    为每个表单提供一个标识符(名称,ID,类等),然后用jQuery对其进行定位并序列化,例如:

    $("#left-side-form").on("submit",function(e){ 
       e.preventDefault(); 
       var formData = $(this).serialize();
       var action = $(this).attr("action");
       $.ajax(action, formData, function(response){
          //update select values in left side form here
          ......
       }
    });
    

    我想在提交右侧客户表格时创建左侧div,并在完成创建客户日志后,更新左侧div(发票)中的客户列表(下拉)

    根据你的描述,这听起来像你想异步POST数据,然后重新加载包含div而不执行完整的回发:

    首先,使用jQuery

    在HTML中包含以下行: <script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

    与$ .ajax()异步POST

    $('#yourForm').submit(function(event) {
        event.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'php/yourPHPScript.php',
                data: $(this).serialize(),
                dataType: 'json'
            });
    });
    

    $(this).serialize()会将所有输入发布到表单中,所以你可以在你的php代码中访问它们,例如: $yourField = $_POST['yourField];

    使用$ .load()动态重新加载数据

    所以,您已经将数据发送回服务器,现在您希望重新加载您的div以反映服务器端更改,而不进行完整回发。 我们可以用jQuery的$.load()来做到这一点:

    我们来编写一个简单的函数来调用$.load()

    function reloadDiv(){
        $('#divToReload').load('scriptWithThisDivContent.php');
    }
    

    我们可以将它放到较早的$.ajax()函数中,以便在异步POST之后使用延迟对象返回到服务器:

    $('#yourForm').submit(function(event) {
        event.preventDefault();
            $.ajax({
                type: 'POST',
                url: 'php/yourPHPScript.php',
                data: $(this).serialize(),
                dataType: 'json'
            }).done(function() {
               reloadDiv();   
            });
    });
    
    链接地址: http://www.djcxy.com/p/55297.html

    上一篇: How to handle multiple forms in one page

    下一篇: Why can I pass an instance method to multiprocessing.Process, but not a multiprocessing.Pool?