使用jQuery获取表单输入字段?

Vas*_*sil 404 javascript jquery

我有一个包含许多输入字段的表单.

当我使用jQuery捕获提交表单事件时,是否可以在关联数组中获取该表单的所有输入字段?

nic*_*ckf 508

$('#myForm').submit(function() {
    // get all the inputs into an array.
    var $inputs = $('#myForm :input');

    // not sure if you wanted this, but I thought I'd add it.
    // get an associative array of just the values.
    var values = {};
    $inputs.each(function() {
        values[this.name] = $(this).val();
    });

});
Run Code Online (Sandbox Code Playgroud)

感谢Simon_Weaver的提示,这是另一种方法,你可以使用serializeArray:

var values = {};
$.each($('#myForm').serializeArray(), function(i, field) {
    values[field.name] = field.value;
});
Run Code Online (Sandbox Code Playgroud)

请注意,此代码段将在<select multiple>元素上失败.

似乎新的HTML 5表单输入不适serializeArray用于jQuery 1.3版.这适用于1.4+版本

  • http://api.jquery.com/serializeArray/如果你想在一行中这样做:-) (71认同)
  • @Nathan,你应该使用`$("#new-ticket:input,#new-ticket:select")`,甚至更好,`$(":input,:select","#new-ticket")` (2认同)

Lan*_*ing 249

在这个问题的晚会上,但这更容易:

$('#myForm').submit(function() {
    // Get all the forms elements and their values in one step
    var values = $(this).serialize();

});
Run Code Online (Sandbox Code Playgroud)

  • 根据jQuery API文档,`.serialize()`(http://api.jquery.com/serialize/)将所有表单元素放在一个字符串中,准备好附加到查询字符串中的URL,基本上模仿一个GET表单请求.这无法完成nickf的答案. (40认同)
  • 这确实是最好的答案.它甚至可以保留您输入字段可能具有的任何数组格式.我不认为nickf的答案实际上会保持你的数据结构完整,如果它是使用Zend_Form形成的,例如,你有字段[something]和字段[something_else]作为输入的名称...至少在语义上,我看不出它会怎样...... (8认同)
  • 值得知道:`.serialize()`也适用于表单元素.所以`$('form select').serialize()`将仅为选择序列化数据. (5认同)
  • 而不是重复`$('#myForm')`,使用$(this). (3认同)

Sim*_*ver 23

jquery.form插件可以帮助别人正在寻找结束了在这个问题上.我不确定它是否直接做你想要的.

还有serializeArray函数.


Mal*_*chi 15

有时我发现一次获得一个更有用.为此,有这样的:

var input_name = "firstname";
var input = $("#form_id :input[name='"+input_name+"']"); 
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 12

$('#myForm').bind('submit', function () {
  var elements = this.elements;
});
Run Code Online (Sandbox Code Playgroud)

elements变量将包含表单中的所有输入,选择,textareas和fieldsets.


Elm*_*lmo 9

这是另一种解决方案,通过这种方式,您可以获取有关表单的所有数据,并在服务器端调用或其他内容中使用它.

$('.form').on('submit', function( e )){ 
   var form = $( this ), // this will resolve to the form submitted
       action = form.attr( 'action' ),
         type = form.attr( 'method' ),
         data = {};

     // Make sure you use the 'name' field on the inputs you want to grab. 
   form.find( '[name]' ).each( function( i , v ){
      var input = $( this ), // resolves to current input element.
          name = input.attr( 'name' ),
          value = input.val();
      data[name] = value;
   });

  // Code which makes use of 'data'.

 e.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以将此与ajax调用一起使用:

function sendRequest(action, type, data) {
       $.ajax({
            url: action,
           type: type,
           data: data
       })
       .done(function( returnedHtml ) {
           $( "#responseDiv" ).append( returnedHtml );
       })
       .fail(function() {
           $( "#responseDiv" ).append( "This failed" );
       });
}
Run Code Online (Sandbox Code Playgroud)

希望这对你们任何人都有用:)


Oli*_*Oli 6

联想?并非没有一些工作,但您可以使用通用选择器:

var items = new Array();

$('#form_id:input').each(function (el) {
    items[el.name] = el;
});
Run Code Online (Sandbox Code Playgroud)

  • @JonathanMoralesVélez 2008 年的 Oli 不再发表评论。2015 年的观点与你一致。 (4认同)

spa*_*ane 6

这段代码将 代替名称,电子邮件输入您的表单字段名称

$(document).ready(function(){
  $("#form_id").submit(function(event){
    event.preventDefault();
    var name = $("input[name='name']",this).val();
    var email = $("input[name='email']",this).val();
  });
});
Run Code Online (Sandbox Code Playgroud)


小智 5

有一个类似的问题,有轻微的扭曲,我以为我会抛出这个.我有一个回调函数,它获取表单,所以我已经有一个表单对象,并且不能轻松变种$('form:input').相反,我提出了:

    var dataValues = {};
    form.find('input').each(
        function(unusedIndex, child) {
            dataValues[child.name] = child.value;
        });
Run Code Online (Sandbox Code Playgroud)

它的相似但不完全相同的情况,但我发现这个线程非常有用,并且认为我最终会把它塞进去并希望其他人发现它很有用.


Sar*_*els 5

jQueryserializeArray不包含禁用字段,因此如果您也需要这些字段,请尝试:

var data = {};
$('form.my-form').find('input, textarea, select').each(function(i, field) {
    data[field.name] = field.value;
});
Run Code Online (Sandbox Code Playgroud)


Chr*_*ler 5

http://api.jquery.com/serializearray/

$('#form').on('submit', function() {
    var data = $(this).serializeArray();
});
Run Code Online (Sandbox Code Playgroud)

这也可以在没有 jQuery 的情况下使用 XMLHttpRequest Level 2 FormData 对象完成

http://www.w3.org/TR/2010/WD-XMLHttpRequest2-20100907/#the-formdata-interface

var data = new FormData([form])
Run Code Online (Sandbox Code Playgroud)