鉴于我在页面上有某种形式,我知道我可以使用 unicode 序列化字符串
var query = jQuery('#some-form').serialize();
也可以使用 设置每个输入的值$('#some-input').val(...)
。假设上面的相同表单已重置,但我仍然有查询字符串 - 是否有一种简单的方法可以从该字符串填充表单?我意识到我可以解析它并单独设置每个输入/选择,但我正在寻找一个更简单的解决方案。谢谢。
鉴于我在页面上有某种形式,我知道我可以使用 unicode 序列化字符串
var query = jQuery('#some-form').serialize();
也可以使用 设置每个输入的值$('#some-input').val(...)
。假设上面的相同表单已重置,但我仍然有查询字符串 - 是否有一种简单的方法可以从该字符串填充表单?我意识到我可以解析它并单独设置每个输入/选择,但我正在寻找一个更简单的解决方案。谢谢。
jquery.deserialize 插件应该可以帮助你。
您可以将表单序列化为 JSON 数组,并使用像Knockout.js这样的 MVVM 映射插件来自动填写表单。
如果您的表单仅包含文本输入(而不是数组),您可以尝试这个插件,我从它的反序列化函数对应物(https://gist.github.com/rcmachado/242617#file-jquery-unserialize- js ),但它不是返回一个对象,而是填充它所应用的表单。
(function($){
$.fn.fillformwithserialized = function(serializedString) {
var str = decodeURI(serializedString);
var pairs = str.split('&');
var p, idx, val;
for (var i=0, n=pairs.length; i < n; i++) {
p = pairs[i].split('=');
idx = p[0];
var txtBox = this.find('#' + idx + ':input');
if (txtBox.is(":text")) {
txtBox.val(p[1]);
}
}
return this;
};
})(jQuery);
使用示例:
var dataSerialised = sessionStorage.getItem('frmVeryImportantStuff');
if (dataSerialised == null || !confirm("We could restore the previous version of the form you posted. Shall we?"))
return false;
else {
$("#frmVeryImportantStuff").fillformwithserialized(dataSerialised);
}
显然,您首先需要将表单保存在 sessionStorage 中。例子:
sessionStorage.setItem("frmVeryImportantStuff", $(frmVeryImportantStuff).serialize());