【问题标题】:Submit multiple forms by single button通过单个按钮提交多个表单
【发布时间】:2016-10-28 13:11:24
【问题描述】:

我的 HTML 文件中有这个 php 代码。我需要使用这些表格更新数据库表。

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {

    echo '<img class="plan1" id="'.$row["imageID"].'" style="position:absolute; top:'.$row["top"].'px; left:'.$row["left"].'px;" src="'.$row["url"].'" width="'.$row["width"].'" height="'.$row["height"].'" />';

    echo '<form action="saveimage3.php" method="post" id="form1">';
    echo '<input type="hidden" name="planid" value="'.$row["planID"].'"/>';
    echo '<input type="hidden" name="version" value="1'.$row["version"].'"/>';
    echo '<input type="hidden" name="imageid" value="'.$row["imageID"].'"/>';
    echo '<input type="hidden" name="url" value="'.$row["url"].'"/>';

    echo '<input type="hidden" name="left" id="l'.$row["imageID"].'" value="'.$row["left"].'"/>';
    echo '<input type="hidden" name="top" id="t'.$row["imageID"].'" value="'.$row["top"].'"/>';
    echo '<input type="hidden" name="width" id="w'.$row["imageID"].'" value="'.$row["width"].'"/>';
    echo '<input type="hidden" name="height" id="h'.$row["imageID"].'" value="'.$row["height"].'"/>';
    echo '</form>';
}
}

这将根据来自数据库的数据创建多个表单。

我有这个 ajax 代码可以将所有表单提交到 php 文件

<script>
        function validate(form){
        //get form id
        var  formID = form.id;
        var formDetails = $('#'+formID);
            $.ajax({
                type: "POST",
                url: 'saveimage3.php',
                data: formDetails.serialize(),
                success: function (data) {  
                    // log result
                    console.log(data);
                    //for closing popup
                      location.reload();
                    window.close()
                },
                error: function(jqXHR, text, error){
                // Displaying if there are any errors
                console.log(error);
                }
            });
        return false;
    }
        //this function will create loop for all forms in page
        function submitAll(){
                for(var i=0, n=document.forms.length; i<n; i++){
                    validate(document.forms[i]);
                }
            }
</script>

我有这个按钮

<button onclick="submitAll()">Save Version</button>

通过提交这些,数据库仅更新第一个表单数据。其他形式不向 php 文件发送数据。我怎样才能把所有的表格都放到php文件中???

【问题讨论】:

    标签: javascript php ajax forms


    【解决方案1】:

    可能是因为 location.reload();
    您正在从第一个表单处理程序和页面重新加载和中断验证循环中获得答案,因此其他表单不会被发布?
    并且 - 您需要将表单 ID 更改为唯一!

    【讨论】:

    • 你是对的。只有在所有 ajax 请求完成后才允许重新加载,而不是在第一个请求完成后。但是,修复此问题不足以使其正常工作。要修复的最重要的一行是var formDetails = $('#'+formID); 这行代码导致 validate() 函数始终发送第一个表单的数据,无论如何。
    • 这不是问题,因为它也可以工作-检查一下-> jsfiddle.net/hew39pj4/4 其他问题是小提琴中的相同ID我更改为不同的。如果每次仅从具有该 id 的第一个表单中获取数据时,表单的相同 id
    • 这不是问题,因为它也可以工作-检查一下-> jsfiddle.net/hew39pj4/4 其他问题相同 ids in fiddle if you change to unique ids 记录了两个表单输入,但如果它们相同,则始终采用从具有相同 ID 的第一个表单输入数据。
    • 在我看来,他应该使用唯一的表单ID并将var formID = form.id; var formDetails = $('#'+formID);替换为var formDetails = $(form);。当您已经在参数中拥有一个元素时,重新查询它是非常糟糕的。尽管如此,使用唯一的表单 ID 应该足以使其工作。我仍然建议修复 location.reload() 问题。
    • @user2646988 你对重新查询是正确的,但它有效:)
    【解决方案2】:

    Javascript。在每个表单中创建一个隐藏的提交字段,然后在单击实际提交按钮时,使其触发一个事件,要求浏览器像所有提交按钮都已单击一样。

    我会为此目的使用 JQuery .trigger() 事件。 http://api.jquery.com/trigger/

    因此,如果您有一个 ID 为“submit-all”的实际提交按钮和一个带有“submit-button”类的隐藏提交按钮,您可以使用以下 JQuery:

    $(document).ready(function() {
    
        $('#submit-all').click(function(){
    
            $('.submit-button').trigger("click");
    
        });
    });
    

    【讨论】:

    • 我试过了。但现在它只将最后一个表单数据发送到 php 文件
    【解决方案3】:

    代替

    var formDetails = $('#'+formID);
    

    试试

    var formDetails = $(form);
    

    我不知道这是否足以修复您的错误。试试看吧。

    你的论证中已经有了你的形式。只需像我一样将它包装在一个 jQuery 集合中。

    另外,为所有表单指定不同的 ID,以防万一。

    【讨论】:

      【解决方案4】:

      我解决了。出现问题是因为每个表单都具有相同的 ID。通过一个增量变量,我对表单 id 进行了更改,使其从一个变为一个。然后问题解决了。非常感谢所有试图帮助我的人..!

      【讨论】:

        【解决方案5】:

        在您的while 循环中,每个表单都有相同的id="form1"。这不仅是无效的 HTML,还会导致您只提交一个表单的问题。 增加表单ID,然后在JS中简单做:

        $('#submitAll').click(function(){
            $('[id*="form"]').submit();
        });
        

        【讨论】:

        • 我试过了,但没有任何反应。我需要在其他任何地方进行更改吗?
        • 你尝试了什么?您是否更改了 PHP 文件中的表单 ID?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多