Skip hidden inputs to jquery serialization

I have forms with hidden and visible inputs as shown below. In this example, I want to serialize only name = "country", which is not hidden

<form id="finalform">
<input type='hidden' name='sid' value='901271316' />
<input type='hidden' name='tco_currency' value='USD'>
<input   name='country' value='India' />
</form>

I tried the code below, but it even serializes hidden inputs.

var frm = $("form#finalform:visible");
 var add= JSON.stringify(frm.serializeArray());
+4
source share
4 answers

use below code. not(:hidden)will not include the input type hidden inserialize()

check demo

var frm  = $('#finalform').find(":input:not(:hidden)").serialize();

or

var frm  = $('#finalform :input:not(:hidden)').serialize();

DEMO

var frm  = $('#finalform :input:not(:hidden)').serializeArray();

var frm1  = $('#finalform').find(":input:not(:hidden)").serializeArray();

$('#firstOutput').text(JSON.stringify(frm))
$('#secondOutput').text(JSON.stringify(frm1))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form id="finalform">
 <input type='hidden' name='sid' value='901271316' />
 <input type='hidden' name='tco_currency' value='USD'>
 <input   name='country' value='India' />
</form>


<div id="firstOutput"> </div>
<div id="secondOutput"> </div>
Run codeHide result
+4
source

You can make a temporary copy and remove hidden inputs from it after serialization:

var form = $("#finalform").clone();
$(form).find("input[type=hidden]").remove()
var serialized = $(form).serializeArray();
+2
source

I find this in a cleaner way:

var frm = $('#finalform [type!="hidden"]').serialize()
+2
source

Here is another possible solution with a demo.

var notHidden = $('#finalform > :not(input[type=hidden])').serializeArray();

$('#itemsSerializedCount').text($(notHidden).length)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/json2/20140204/json2.js"></script>
<form id="finalform">
<input type='hidden' name='sid' value='901271316' />
<input type='hidden' name='tco_currency' value='USD'>
<input   name='country' value='India' />
</form>

<lablel id="itemsSerializedCount"></label>
Run codeHide result

Here, an input control that is not hidden is serialized.

0
source

All Articles