Works in all browsers.
const formSerialize = formElement => {_x000D_
const values = {};_x000D_
const inputs = formElement.elements;_x000D_
_x000D_
for (let i = 0; i < inputs.length; i++) {_x000D_
values[inputs[i].name] = inputs[i].value;_x000D_
}_x000D_
return values;_x000D_
}_x000D_
_x000D_
const dumpValues = form => () => {_x000D_
_x000D_
const r = formSerialize(form);_x000D_
console.log(r);_x000D_
console.log(JSON.stringify(r));_x000D_
}_x000D_
_x000D_
const form = document.querySelector('form');_x000D_
_x000D_
dumpValues(form)();_x000D_
_x000D_
form.addEventListener('change',dumpValues(form));
_x000D_
<form action="/my-handling-form-page" method="post">_x000D_
<div>_x000D_
<label for="name">Name:</label>_x000D_
<input type="text" id="name" name="user_name" value="John">_x000D_
</div>_x000D_
<div>_x000D_
<label for="mail">E-mail:</label>_x000D_
<input type="email" id="mail" name="user_mail" value="[email protected]">_x000D_
</div>_x000D_
<div>_x000D_
<label for="interests">Interest:</label>_x000D_
<select required="" id="interests" name="interests">_x000D_
<option value="" selected="selected">- None -</option>_x000D_
<option value="drums">Drums</option>_x000D_
<option value="js">Javascript</option>_x000D_
<option value="sports">Sports</option>_x000D_
<option value="trekking">Trekking</option>_x000D_
</select>_x000D_
</div>_x000D_
<div>_x000D_
<label for="msg">Message:</label>_x000D_
<textarea id="msg" name="user_message">Hello My Friend</textarea>_x000D_
</div>_x000D_
</form>
_x000D_