JQuery serializeArray不包含没有选定选项的选择

时间:2016-01-14 21:52:38

标签: javascript jquery

我使用serializeArray()方法将HTML表单作为JS对象获取。当表单具有带“多个”选项的选择控件但未选择任何选项时,该对象不会被序列化。

以下是一个示例:https://fiddle.jshell.net/tfzxmr9d/1/

当它有一个或多个值时,它会工作。它应该返回一个具有控件名称和空值或空值的对象。它是否按预期工作?

3 个答案:

答案 0 :(得分:0)

这是预期的,没有有效的结果。要更改此行为,请在字段初始化后立即添加此行:

fields = fields || [{name: 'multiple', value: 'Null'}];

答案 1 :(得分:0)

您似乎忘记了$(function(){});准备语法。您的代码可能看起来像那样。因为你的案例中的jQuery可能还没准备好。

$(function(){

   function showValues() {
    var fields = $( ":input" ).serializeArray();
    $( "#results" ).empty();
    jQuery.each( fields, function( i, field ) {
      $( "#results" ).append( field.name + ": " + field.value + "<br>" );
    });
  }

  $( ":checkbox, :radio" ).click( showValues );
  $( "select" ).change( showValues );
  showValues();
});

答案 2 :(得分:0)

if(!fields.some(function(element){return element.name === "multiple"})){
    fields.push({name: 'multiple', value: 'Null'});
}

https://fiddle.jshell.net/tfzxmr9d/2/我无法想办法检查整个数组的“倍数”,以便你去。

但您应该修改服务器端代码以接受默认输出,因为这是HTML表单序列化的正常方式。