Определение нажатой submit в onsubmit
При отправки формы на сервер с помощью Ajax возникает проблема определении нажатой submit в onsubmit. Предлагаю два простых решений:
- Запоминать кнопку обработчиком
onclickна уровне формы и затем добавлять ее, если она не null в отправляемые данные. - Обрабатывать
onclickна самой кнопкеsubmitи отправлять данные в этом обработчике.
Этот пример демонстрирует определение нажатой submit в onsubmit с предварительной обработкой onclick на форме:
Сюда выводится результат
Исходный код этого примера:
<script type="text/javascript">
var submit;
function SubmitControl(e)
{
e=e || window.event;
o=getEventTarget(e);
if(e.type=='click')submit=( o.type=='submit' ? o : null );
if(e.type=='click')document.getElementById('res').innerHTML=''; // очищаю поле вывода
document.getElementById('res').innerHTML+='<br>e.type='+e.type+'<br>o.type='+ o.type+
'<br>submit: '+(submit?'name='+submit.name+' value='+submit.value:'null')+
(e.type=='submit'?'<br>отправка формы на сервер':'')+'<br>';
//if(e.type='submit') отправка формы на сервер с помощью ajax
//if(e.type=='click')return true; // продолжаем всплытие чтобы отработал onsubmit
return (e.type=='click');
}
function getEventTarget(e) {
e=e || window.event;
var target=e.target || e.srcElement;
if(typeof target == "undefined")return e; // передали this, а не event
if(target.nodeType==3) target=target.parentNode;// боремся с Safari
return target;
}
</script>
<form method="POST" onclick="return SubmitControl(event)" onsubmit="return SubmitControl(event)">
<input type="button" name="sub" value="Кнопка button">
<input type="submit" name="sub" value="Кнопка Submit - 1 name=sub">
<input type="submit" name="sub" value="Кнопка Submit - 2 name=sub">
<input type="submit" value="Кнопка Submit без name">
</form>
<div id="res" class="res">Сюда выводится результат</div>
Это обработка onclick на submit:
<form method="post" action="index.php" accept-charset="utf-8" onsubmit="return SendForm('info',this);">
<input type="submit" name="sub1" value="Кнопка sub1" onclick="return SendForm('info',this);">
</form>
<script type="text/javascript">
function SendForm(obj,frm){ // универсальная отправка формы
var str=''; // сюда складывается строка с переменными для отправки формы
if(frm.tagName=='INPUT'){/*передан input type=submit*/
str=encodeURIComponent(frm.name)+'='+encodeURIComponent(frm.value)+'&';
frm=frm.form;
}
// дальше идет стандартная отправка
}
</script>
.
Прокомментировать/Отблагодарить