我有以下两个变量。我将数据变量发送到服务器,并在返回时,想要访问各种原始值。
我可以对数据或原始变量采用某种方式(1).val()方法,但是需要确保我以正确的顺序访问它们,这可能导致将来的维护问题。或者我可以使用名称选择器从原始DOM获取值,但似乎我正在做两次工作。或者我可以在原始表单中添加ID和名称,但这似乎是浪费。
理想情况下,我可以将表单的名称/值转换为某种对象,但不像serializeArray不会创建数组,而是将值指向与名称相关联。例如,如果我的表单有<input name="foo" value="bar">
,我将能够以newObject.foo的身份访问该值。
有关最佳方法的任何建议吗?
var raw=$("#form_id").find('input,select');
var data=raw.serializeArray();
答案 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。
如果我的问题是对的,我不知道。