我使用jQuery和一个$.ajax()调用通过post发布一些复杂的HTML到我的数据库。我能够通过.html()获得表单的结构,但是用户的选择在这个过程中丢失了。我想我可以用.clone()代替,但是我得到了一个错误:
Uncaught :无法从‘HTMLInputElement’读取'selectionDirection‘属性:输入元素的类型(’隐藏‘)不支持选择。
// Cloning my form
var myFormHTML = $("#myForm").clone();
console.log(myFormHTML);
var inputData = {
advancedSearchHTML: myFormHTML,
otherParam: otherVar
};
console.log(inputData);
// JS ERROR is down here in the $.ajax() call:
$.ajax({
type: "POST",
url: 'serverSideScript.php',
dataType: 'html',
data: inputData,
success: function (response) {
console.log(response);
}
});这些表单非常复杂,包括100多个<input type="hidden">,它们根据用户的选择而变化。我无法改变它的工作方式。所以我的问题是,我有一个由用户生成的具有HTML的复杂表单,我需要同时复制HTML及其所有值,这样它就可以插入到我的数据库中,并最终重新加载到DOM中,也许几个月后。有什么想法吗?
编辑:我尝试了我能想到的所有东西,但我似乎无法从中获取用户输入值,这令人沮丧,因为我习惯于只在Chrome的检查器中点击"Copy“,所以在我看来,从<form>中获取相同的HTML作为字符串应该很容易。我尝试过的一些事情:
$myFormHTML.html()
$myFormHTML.innerHTML
$myFormHTML.outerHTML
$myFormHTML.get(0).innerHTML
$myFormHTML.get(0).outerHTML
JSON.stringify($myFormHTML.html())我已经得到了一个完整的jQuery对象,当它附加到DOM时,它包含了用户的所有输入(:选中的状态、:选中的状态、检查的状态、输入值等)。我需要接受这个jQuery对象,并将它的所有HTML内容输出到一个可以传输到服务器的字符串中。有人知道该怎么做吗?也许有一种方法可以在$.append()期间完成相同的循环,这样我就可以从头开始构建一个字符串了吗?还有其他想法吗?
发布于 2015-02-16 21:22:42
http://api.jquery.com/serialize/
这完全是您想要的,除非您的表单是由用户输入生成的,所以不能验证它是否有效。如果表单标记不正确,则无法序列化数据。
下面是一个例子:
http://jsfiddle.net/jyc30nxz/1/
$('#myForm').serialize();这其中的一个重要方面是,如果表单输入没有"name“属性,则不能在序列化期间返回它的值--这就是为什么您以空字符串结束。
编辑:
这也适用于:
console.log($(this).clone().html())我猜您的表单标记无效。
发布于 2015-02-16 19:43:23
你试过.serialize表单内容了吗?
https://stackoverflow.com/questions/28548898
复制相似问题