【发布时间】:2014-08-17 18:56:54
【问题描述】:
我有一个包含多个 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 页面,实际上只发生了一次提交。
有人有什么想法吗?
谢谢。
【问题讨论】:
-
您是否要向网站发送垃圾邮件?
-
@blex 一点也不。 iframe 中的页面位于我的网络服务器上。我不确定这是否是用例的最佳实现(使用一个或多个 iframe)。我有一个使用 d3 创建树的页面。用户可能会或可能不会创建这些树中的几个。如果他们这样做了,他们每次都会创建一个新的 iframe(以及一个与之配套的选项卡)。如果他们创建了几棵树,我想将他们制作的每棵树提交到服务器以存储在数据库中以供以后处理。
-
哦,好吧,我没有注意到
d3用于插入。好吧,我不知道 d3 是如何工作的,但是不要使用多个 iframe,您应该查看 Ajax(您可以发布任意数量的表单,无需离开页面,也无需任何 iframe)-> Take a look here : )
标签: javascript html forms iframe