访问表单输入值的最佳方法

时间:2012-05-27 15:48:27

标签: jquery

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

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

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

有关最佳方法的任何建议吗?

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

5 个答案:

答案 0 :(得分:1)

var formVals = [];
$('select, input').each(function(i, v){
   formVals[$(this).attr('name')] = $(this).val();
})

答案 1 :(得分:1)

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

var form = $("#form_id")[0];
console.log( form.foo.value );

答案 2 :(得分:0)

我认为jQuery允许您选择每个输入(甚至选择,无线电和复选框,这些实际上不是一次输入)来使用serializeArray()构建该数组:

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

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

这会让你看起来像一个对象:

[   {     名称:“foo”,     价值:“酒吧”   },   {      ...   } ]

希望这有帮助。

答案 3 :(得分:0)

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

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

然后获取单个对象:

result.ObjectName;

答案 4 :(得分:0)

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

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

Note Reference

如果我的问题是对的,我不知道。