3

我有以下两个变量。我将数据变量发送到服务器,并在返回时想要访问各种原始值。

我可以对数据或原始变量执行某种 eq(1).val() 方法,但随后需要确保我以正确的顺序访问它们,这可能会导致未来的维护问题。或者我可以使用名称选择器从原始 DOM 中获取值,但似乎我做了两次工作。或者我可以在原始表单中添加 ID 和名称,但这似乎是一种浪费。

理想情况下,我可以将表单的名称/值转换为某种对象,但与 serializeArray 不同的是,它不会创建数组,而是将值定向到名称。例如,如果我的表单有<input name="foo" value="bar">,我将能够以 newObject.foo 的形式访问该值。

关于最好的方法有什么建议吗?

var raw=$("#form_id").find('input,select');
var data=raw.serializeArray();
4

5 回答 5

1
var formVals = [];
$('select, input').each(function(i, v){
   formVals[$(this).attr('name')] = $(this).val();
})
于 2012-05-27T16:02:12.910 回答
1

您可以通过直接访问表单来执行此操作:

var form = $("#form_id")[0];
console.log( form.foo.value );
于 2012-05-27T16:08:25.997 回答
0

我认为 jQuery 允许您选择每个输入(甚至选择、单选和复选框,它们实际上并不是一次输入)来使用 serializeArray() 构建该数组:

var object = $(":input").serializeArray();

从这里的 jQuery 文档:http ://api.jquery.com/serializeArray/ 当然,将 $(":inputs") 限制为 tragetted 表单,特别是如果您在文档中提供了多个表单。

这应该让你的对象看起来像:

[ {名称:“foo”,值:“bar”},{ ... }]

希望这可以帮助。

于 2012-05-27T15:55:51.320 回答
0

如果我正确理解您的问题,我会序列化输入和表单字段:

var result = $('form').serializeArray();

然后获取单个对象:

result.ObjectName;
于 2012-05-27T15:59:56.267 回答
0
var raw=$("#form_id").find('input,select');

这样更有效率。这已在此处的 Jsperf 性能测试中得到证明, 它表明上述方法在几乎所有浏览器中都优于其他测试用例。尽管var item = $(".buttonRef");在某些情况下直接获取方法的表现要好。注意:虽然在大多数情况下不建议这样做,但 ID 的访问速度比类更快。当谈到访问表单输入值时的时间效率时,您可能会考虑 id。

注释参考

我不知道你的问题是否正确。

于 2012-05-27T16:15:22.610 回答