javascript - 合并两个 html 表单中的数据元素无法正常工作

标签 javascript jquery html forms dom

我正在尝试组合来自两个 HTML 表单的数据,然后将其作为单个表单发布,该表单工作正常,只是某些元素没有从一个表单复制到另一个表单。我定义了以下 javascript 函数来组合表单元素:

var form = document.forms['auth_form'];
    var issuedata = window.opener.document.getElementById('Create').elements;
     for (var i = 0; i < issuedata.length; i++) {
         var data = issuedata[i];
         alert(data.innerHTML);
         if(data.type !== "submit")
         form.appendChild(data);     
     }

实际文件

这是第一种形式:

    <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
var childWindow = null;
function child_open() {

    childWindow = window.open('new.html', "_blank",
            "resizable=no,width=600, height=280,top=200,left=200");

}
function parent_disable() {
    if (childWindow && !childWindow.closed)
        childWindow.focus();
}
</script>
</head>
<body onclick="parent_disable();">
<input type="button" value="Create Jira Ticket" onclick="child_open()" />
<form name="auth_form" id="Create" method="post">
        <input name="bug_status" value="NEW" type="hidden">
        <input name="rep_platform" value="All" type="hidden">
        <input name="component" value="AFAS" type="hidden">
        <input name="bug_severity" value="Beeper Call" type="hidden"/>
        <input type="hidden" name="comment" value="hello hi"><br>

</form>
</body>
</html>

这是第二种形式:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
	var count = 0;
	function submit_and_close() {
		var form = document.forms['auth_form'];
		var issuedata = window.opener.document.getElementById('Create').elements;
		 for (var i = 0; i < issuedata.length; i++) {
			 var data = issuedata[i];
			 alert(data.innerHTML);
			 if(data.type !== "submit")
			 form.appendChild(data);	 
         }
		 
		 alert(form.innerHTML);

		form.submit();
		// close the window after form submission is complete.
		var docLoaded = setInterval(function() {

			if (document.readyState !== "complete") {

				return;
			}
			clearInterval(docLoaded);
			//window.close();
		}, 30);

	}
</script>
</head>
<body>
	<header>
		<div id="dialog" title="JIRA Dialog">
			<h1>JIRA Credentials</h1>
		</div>
	</header>
	<div>
		<form name="auth_form" id="auth_form" method="post">
			<label> User Name: </label> <input type="text" name="username"><br>
			<label> Password: </label> <input type="password" name="password"><br>
			<input type="button" value="Log In" onclick="submit_and_close()">
		</form>
	</div>
</body>
</html>

例如,我无法看到以下元素从第二个 html 页面中的“Create”表单复制到“auth_form”。

<input name="rep_platform" value="All" type="hidden">
<input name="bug_severity" value="Beeper Call" type="hidden"/>

即使花了一些时间调试后,我也无法弄清楚为什么某些元素被成功复制,而另一些则没有。

最佳答案

.elements 返回元素的实时集合。当您从集合中追加一个元素时,它会从集合中删除,因此集合中的索引i会不同步,因此会跳过所有其他元素。

相反,只需附加集合中的第一个元素,直到集合为空。 (遇到提交按钮元素时只需将其分离即可)。或者,从最后一个到第一个而不是从第一个到最后一个循环遍历集合。


(querySelectorAll() 之所以有效,是因为它返回一个静态集合,而不是实时集合。)

关于javascript - 合并两个 html 表单中的数据元素无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474187/

相关文章:

javascript - Ajax调用一开始不起作用,后来调用成功

javascript - 动态导入的使用方法是什么?

javascript - 在 <a> 标签中禁用 href

javascript - 如何使用 C# MVC4 调用 $.ajax 中的错误函数?

jquery if - 事件快捷方式存在吗?

php - 与 PHP 的永久链接

html - Chrome 复制文本尽管使用 "-webkit-user-select: none"

javascript - 使用 javascript 中的 onchange 在 TableView 中显示多个复选框值

javascript - 如何将异步等待放入循环中?不工作

javascript - 隐藏在包含 div 滚动条的下方的 Div 溢出 : scroll set