我有一个网页,在该网页上使用 ajax 调用获取 html 内容,ajax 调用也返回了表单元素。
使用 ajax 将表单添加到页面后,当我尝试提交表单时,它不起作用并给我错误,即表单元素未定义。
代码是这样的:
$.ajax({
type: "GET",
url: "url/" + $("#search_id").val(),
async: false,
dataType: "html",
error: function(XMLHttpRequest, status, errorThrown) {
alert("Error!!");
},
success: function (data, status) {
$("#parent-element").html("");
$("#parent-element").append(data);
},
complete: function() {
}
});
//Delegate click event
$('body').delegate('div#footer #submit1','click', function() {
var form_element=document.getElementById('search_form');
verifyChecked(form_element);
});
function verifyChecked (form_obj) {
var formname = form_obj.name;
var orig_query = document[formname].query.value;
if (orig_query == "") {
return false;
};
form_obj.submit();
return false;
}
上面的代码片段进行 ajax 调用并附加了具有如下形式元素的 html 内容
<form id="search_form">
<input type="hidden" value="SOMETHING" name="search">
<input id="query_data" type="text" value="test" name="query">
</form>
现在,当我单击提交按钮时,出现错误:TypeError: document[formname].query is undefined
请帮助纠正它。
注意:问题是表单元素未绑定到表单。输入元素以 HTML 格式显示,但我认为 DOM 中不存在。所以这就是为什么我的表单提交没有输入元素。
所以问题是我想让输入元素绑定到表单,我该怎么做?我是否需要重新加载 DOM 以及我是如何做到的?
这正是我想要做的:JS Bin Example
我现在找到了解决方案,之前我的表格是这样的:
<form name="search" id='search_form' action="https://mysearch/search?" onSubmit="return verifyChecked(this);">
<tr>
<td id="input_p" width="100%">
<input type="hidden" value="SOMETHING" name="search">
<input id="query_data" type="text" value="test" name="query">
</td>
<td>
<input type="image" src="graphics/search.gif" id="submit1" />
</td>
</tr>
</form>
现在我已将表单标签移动到与输入标签相同的 td 内:
<tr>
<td id="input_p" width="100%">
<form name="search" id='search_form' action="https://mysearch/search?" onSubmit="return verifyChecked(this);">
<input type="hidden" value="SOMETHING" name="search">
<input id="query_data" type="text" value="test" name="query">
</form>
</td>
<td>
<input type="image" src="graphics/search.gif" id="submit1" />
</td>
</tr>
和宾果游戏..它开始工作了。我没有解释为什么它的工作。因为我在上面的页面上具有相同的表单和 DOM 结构,可以完美运行,但是对于 ajax 调用返回的表单标记,它不起作用。任何解释都将有助于理解其工作原理。