2

In my form I got both visible and non-visible (display:none) elements. I need to get form data for only visible fields. I am collecting the data with the following code:

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

I know about disabling the name propery of the input, but after the data is collected, I would like to return this property for all fields back. Any ideas would be welcome. Thank you.

3
  • I am not sure, you can try $('#myForm :visible') Commented Jun 15, 2017 at 12:53
  • $("#myForm :visible").each(function(){ console.log(this); }); Commented Jun 15, 2017 at 13:02
  • It worked, make it as an answer, thank you Commented Jun 15, 2017 at 13:05

2 Answers 2

2
$("#myForm :visible").each(function(){
  console.log(this);
}); 
Sign up to request clarification or add additional context in comments.

Comments

2

Use :visible selector to filter out hidden elements:

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>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.