Часто возникают ситуации, когда во время работы скрипта в браузере надо перед отправкой серверу заполнить форму новыми полями. Допустим, добавить служебную инфомацию о пользователе. Для решения такой задачи я пользуюсь следующим механизмом:
Файл test.html
<html>
<body>
<script>
function appendDataPrim(form,name,value) // добавляет строку или число в форму
{
var doc=form.ownerDocument;
var e=doc.createElement('input');
e.type="hidden";
e.name=name;
e.value=value;
form.appendChild(e);
}
function appendDataArray(form,name,value) // добавляет массив в форму
{
for (var k=0; k<value.length; k++) appendDataForm(name+'[]',value[k]);
}
function appendDataObject(form,name,value) // добавляет объект в форму
{
for (var k in value) appendDataForm (form,name+'['+k+']',value[k]);
}
function appendDataForm(form,name,value) // добавляет все что угодно в форму
{
if (!(value instanceof Object))
appendDataPrim(form,name,value)
else
if (value instanceof Array)
// если это - массив.
appendDataArray(form,name,value)
else
// если это - другой объект
appendDataObject(form,name,value);
}
function appendMultiDataForm(form) // а далее - имя1,значение1, имя2,значение2, ...
{ for (var i=1; i<arguments.length; i+=2) appendDataForm(form,arguments[i],arguments[i+1]);}
</script>
<!-- Проверка -->
<form>
<input type="button" value='test' onclick="javascript:appendMultiDataForm(this.form,'test1',12,'test2','hello')">
<input type="submit">
</form>
<body>
</html>
При каждом нажатии на кнопку test в форму добавляется два новых поля. Это можно проверить, отправив форму и проанализировав строку запроса.