javascript - 在 Firefox 中从多个 Iframe 提交表单

标签 javascript html forms iframe

我有一个包含多个 iframe 的页面。所有 iframe 都引用同一页面。每个 iframe 页面都包含一个我想要提交到服务器的表单。包含 iframe 的页面上有一个“提交全部”按钮,单击该按钮会调用此函数:

    function submitAll() {
    var fs = d3.selectAll('iframe')[0];
    for (var i = 0; i < fs.length; i++) {
        try {
            var el = fs[i];
            var doc = el.contentDocument;
            var root = el.contentWindow['root'];
            var f = doc.getElementById('submit-form');
            removeParentNodeReference(root);
            doc.getElementById('POST-name').value = document.getElementById('name').value;
            doc.getElementById('POST-email').value = document.getElementById('email').value;
            doc.getElementById('POST-phone').value = document.getElementById('phone-number').value;
            doc.getElementById('POST-json').value = JSON.stringify(root);
            doc.getElementById('POST-submit-info').click();
        }
        catch (e) {
            console.log(e.message);
        }
    }

该函数从每个 iframe 中获取内容文档。对于 iframe 的文档,它将继续为 iframe 页面中的表单填写一些表单值。然后该函数将抓取表单的按钮并单击它。这会调用 iframe 中执行一些处理并提交表单的函数。

在 Chrome 中,所有 iframe 的表单都会提交。然而,在 Firefox 中,表单提交只会发生在第一个表单上。我进入调试器并看到,尽管它循环遍历所有 iframe 页面,但实际上只发生了一次提交。

大家有什么想法吗?

谢谢。

最佳答案

除了使用 iframe,您还可以使用 Ajax ,这将不需要设置多个 iframe。 Ajax 允许您向页面发出请求,以便获取其内容或提交数据。

示例

在此示例中,我将使用 jQuery,它的语法比纯 JavaScript 更简单。确保在您的页面中包含 jQuery,这样才能正常工作。

由于我不知道您定义提交数量的方式,我假设您将其作为以下函数的参数:

function submitAll(n){
    /* Get the values from your form
       --> they need to have the same name as in
       your php code (e.g "POST-name", etc) */
    var values = $("#myForm").serialize();

    /* Submit them n times */
    for(var i = 1; i <= n; i++){
        $.ajax({
            url: "yourpage.php",
            type: "post", // or get
            data: values, // declared above
            success: function(){
                console.log("Request "+i+"/"+n+" sent successfully.");
            },
            error: function(){
                console.log("Request "+i+"/"+n+" failed.");
            }
        });
    }
}

很高兴知道

Ajax 是异步的,这意味着在 ajax 请求等待服务器响应时,位于其之后的 JavaScript 代码会继续执行。例如,如果您将此行放在函数末尾:

console.log("End of submitAll");

它可能会在您收到 n 个响应中的任何一个之前执行。

我希望这会有所帮助,如果您尝试此操作并遇到问题,请告诉我们。

关于javascript - 在 Firefox 中从多个 Iframe 提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24438707/

相关文章:

javascript - 将文本和表单放置在彼此平行的位置(并排)- HTML

iphone - 有 cocoa 的表单生成器吗?

javascript - 在电子邮件正文中嵌入图像 nodemailer nodejs

javascript - 使用javascript匹配id选择器的正则表达式

html - 如何在水平线上显示导航栏元素以及网站名称?

html - Bootstrap 3 对齐项结束等效项

javascript - HTML5 视频 - 以编程方式显示/隐藏控件

javascript - If - Else 均为 true

php - 将联系表发送到个人电子邮件的问题

php - 以数组形式插入从表单获取的数据php