簡體   English   中英

動態表單未正確提交 AJAX PHP

[英]Dynamically form not submitting properly AJAX PHP

我正在嘗試在表格中動態生成表單並提交,但我的代碼中有問題,我很難解決,

$(document).ready(function() {
        $('#btnsummary').on('click', function() {
            var date = $('#dddeliverydate').val();
            var soid = $('#sssoid option:selected').val();

            $.ajax({
        url: "tblsum.php",
        method: "POST",
        dataType: 'JSON',

        data:
          
          "&date=" +
          date +
          "&soid=" +
          soid,

        success: function(response) {
            if ( response.length == 0 ) {
    alert("NO DATA FOUND!");
}
else{
        $("#tblsum tbody").empty();
            var len = response.length;
            
            for(var i=0; i<len; i++){
                var invoiceno = response[i].invoiceno;
                var shopname = response[i].shopname;
                var paymentmode = response[i].paymentmode;
                var finalamount = response[i].finalamount;
                if (finalamount==0){
                    return false
                }
                else if (paymentmode=="Credit"){
                    var tr_str = "<tr>" +
                    
                    "<td align='center'>" + invoiceno + "<input type='hidden' name='invoiceno[]' value='"+invoiceno+"'></td>" +
                    "<td align='center'>" + shopname + "</td>" +
                    "<td align='center'>" + paymentmode + "</td>" +
                    "<td align='center'>" + finalamount + "</td>" +
                    "<td align='center'><input type='number' id='finalamount' name='finalamount[]' value='0'></td>" +
                    "</tr>";

                $("#tblsum tbody").append(tr_str);

                }
                else{

                

                var tr_str = "<tr>" +
                    "<td align='center'>" + invoiceno + "<input type='hidden' name='invoiceno[]' value='"+invoiceno+"'></td>" +
                    "<td align='center'>" + shopname + "</td>" +
                    "<td align='center'>" + paymentmode + "</td>" +
                    "<td align='center'>" + finalamount + "</td>" +
                    "<td align='center'><input type='number' id='finalamount' name='finalamount[]' value='" + finalamount + "'></td>" +
                    "</tr>";

                $("#tblsum tbody").append(tr_str);

            }
        }
        $("#tblsum tbody").append("<tr><td colspan='5'><button class='btn btn-success' type='button' id='btnsum'onclick='summary()'>Save</button></td></tr>");
        }
    

        }
    })

        });
    })

如果最終金額為 0 則沒有出現保存按鈕有兩個問題,當我提交表單第一個字段是 invoiceno 時不要在下一頁提交,下面是提交 function

function summary(){
    $(document).ready(function(e) {
       
        
            var date = $('#dddeliverydate').val();
            var soid = $('#sssoid option:selected').val();
            var form = $('#formsum').serialize();
            

            $.ajax({
        url: "test.php",
        method: "POST",
        data:
          "&date=" +
          date +
          "&soid=" +
          soid+
          "&form=" +
          form,
          success: function(data) {
            var w = window.open('about:blank', 'windowname');
    w.document.write(data);
    }
          
            })
        })
    }

下面是我的 PHP 代碼。

for($count = 0; $count<count($_POST['invoiceno']); $count++){
    $data = array(
    
        $invoiceno = $_POST['invoiceno'][$count],
        $amount = $_POST['finalamount'][$count],
);
echo "Invoice NO ".$invoiceno." Amount ".$amount.'<br>';
}

抱歉英語不好。

我在return STOPS之前告訴過你執行 function,所以它之后的所有代碼都已過時。 在這種情況下,當finalamount == 0時,您停止執行 function 並返回到它開始的地方。 所以永遠不會到達創建提交按鈕的代碼。 通過適當的縮進,您可以看到:

$(document).ready(function() {
    //<< ===== START START START of onclick function
    $('#btnsummary').on('click', function() {
       ....                                                                
       $.ajax({                                                        
          url: "tblsum.php",
          ....
          success: function(response) {  
             if ( response.length == 0 ) { .... }
             else{
                $("#tblsum tbody").empty();
                ....
                for(var i=0; i<len; i++){
                   var invoiceno = response[i].invoiceno;
                   var finalamount = response[i].finalamount;
                   ....                                                        
                   if (finalamount==0){                        
                      return false   
              // STOP EXECUTING THIS FUNCTION 
              // AND GO DIRECTLY TO END OF FUNCTION ================= >>
              // code after this will NOT be executed
                   }
                   else if (paymentmode=="Credit"){....}
                   else{....}
                }
              // if finalamount == 0, this will never be executed
                $("#tblsum tbody").append("<tr><td colspan='5'><button class='btn btn-success' type='button' id='btnsum'onclick='summary()'>Save</button></td></tr>");
             }
          }
       })
    });
    // ===== END END END of onclick function << ===============
    // continue executing script from here
})

因此,您可以使用continue而不是returnfor loop中僅跳過一次迭代。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM