jQuery仅获取可见字段的表单数据

时间:2017-06-15 12:51:16

标签: javascript jquery

在我的form中,我同时获得了可见和不可见(display:none)元素。我需要获取仅可见字段的表单数据。我使用以下代码收集数据:

var formData = $('#myForm')
               .serializeArray()
               .reduce(function(obj, item) {   
                    //need to process only visible fields somewhere here                     
                    obj[item.name] = item.value;
                    return obj;
                }, {});

我知道禁用输入的name属性,但在收集数据后,我想返回所有字段的此属性。任何想法都会受到欢迎。谢谢。

2 个答案:

答案 0 :(得分:1)

$("#myForm :visible").each(function(){
  console.log(this);
}); 

答案 1 :(得分:0)

使用:visible selector过滤掉隐藏的元素:



function showValues() {
    var fields = $("form :input:visible").serializeArray();
    $("#results").empty();
    $.each(fields, function( i, field ) {
      $("#results").append( field.value + " " );
    });
  }
 
  $(":checkbox, :radio").click(showValues);
  $(":text").blur(showValues);
  $( "select" ).change(showValues);
  
  showValues();

  body, select {
    font-size: 14px;
  }
  form {
    margin: 5px;
  }
  p {
    color: red;
    margin: 5px;
  }
  b {
    color: blue;
  }

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p><b>Results:</b> <span id="results"></span></p>
<form>
  <input type="text" name="text1" value="text1" id="text1"/>
  <input type="text" name="text2" value="text2" id="text2" style="display:none;"/>
  <select name="single">
    <option>Single</option>
    <option>Single2</option>
  </select>
  <select name="multiple" multiple="multiple">
    <option selected="selected">Multiple</option>
    <option>Multiple2</option>
    <option selected="selected">Multiple3</option>
  </select>
  <br>
  <input type="checkbox" name="check" value="check1" id="ch1" />
  <label for="ch1">check1</label>
  <input type="checkbox" name="check" value="check2" checked="checked" id="ch2" />
  <label for="ch2">check2</label>
  <input type="radio" name="radio" value="radio1" checked="checked" id="r1">
  <label for="r1">radio1</label>
  <input type="radio" name="radio" value="radio2" id="r2">
  <label for="r2">radio2</label>
</form>
&#13;
&#13;
&#13;