OpenJS Foundation - openjsf.org · api.jquery.com

.serializeArray()Returns: Array

Description: Encode a set of form elements as an array of names and values.

The .serializeArray() method creates a JavaScript array of objects, ready to be encoded as a JSON string. It operates on a jQuery collection of forms and/or form controls. The controls can be of several types:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<form>

<div><input type="text" name="a" value="1" id="a"></div>

<div><input type="text" name="b" value="2" id="b"></div>

<div><input type="hidden" name="c" value="3" id="c"></div>

<div>

<textarea name="d" rows="8" cols="40">4</textarea>

</div>

<div><select name="e">

<option value="5" selected="selected">5</option>

<option value="6">6</option>

<option value="7">7</option>

</select></div>

<div>

<input type="checkbox" name="f" value="8" id="f">

</div>

<div>

<input type="submit" name="g" value="Submit" id="g">

</div>

</form>

The .serializeArray() method uses the standard W3C rules for successful controls to determine which elements it should include; in particular the element cannot be disabled and must contain a name attribute. No submit button value is serialized since the form was not submitted using a button. Data from file select elements is not serialized. Elements that do not contain a value attribute are represented with the empty string value.

This method can act on a jQuery object that has selected individual form controls, such as <input>, <textarea>, and <select>. However, it is typically easier to select the <form> element itself for serialization:

1

2

3

4

$( "form" ).on( "submit", function( event ) {

console.log( $( this ).serializeArray() );

event.preventDefault();

} );

This produces the following data structure (provided that the browser supports console.log):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

[

{

name: "a",

value: "1"

},

{

name: "b",

value: "2"

},

{

name: "c",

value: "3"

},

{

name: "d",

value: "4"

},

{

name: "e",

value: "5"

}

]

Example:

Get the values from a form, iterate through them, and append them to a results display.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

<!doctype html>

<html lang="en">

<head>

<meta charset="utf-8">

<title>serializeArray demo</title>

<style>

body, select {

font-size: 14px;

}

form {

margin: 5px;

}

p {

color: red;

margin: 5px;

}

b {

color: blue;

}

</style>

<script src="https://code.jquery.com/jquery-4.0.0.js"></script>

</head>

<body>

<p><b>Results:</b> <span id="results"></span></p>

<form>

<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>

<script>

function showValues() {

var fields = $( ":input" ).serializeArray();

$( "#results" ).empty();

jQuery.each( fields, function( i, field ) {

$( "#results" ).append( field.value + " " );

} );

}

$( ":checkbox, :radio" ).on( "click", showValues );

$( "select" ).on( "change", showValues );

showValues();

</script>

</body>

</html>

Demo:

Read the original on api.jquery.com ↗