БлогNot. Использование нескольких кнопок отправки данных (submit) на одной форме

Использование нескольких кнопок отправки данных (submit) на одной форме

Когда на форме <form> расположено несколько кнопок отправки данных <input type="submit">, есть несколько вариантов, как определять, какая именно из кнопок самбита была нажата.

Самое первое, что пришло в голову - использовать Javascript + скрытый параметр формы:

<FORM NAME="f1" action="index2.php" method="post">
<input type="hidden" name="func">
<input type="text" name="name">
<INPUT TYPE="button" VALUE="Submit 1" onclick="document.f1.func.value='1'; document.f1.submit();">
<INPUT TYPE="button" VALUE="Submit 2" onclick="document.f1.func.value='2'; document.f1.submit();">
<INPUT TYPE="button" VALUE="Submit 3" onclick="document.f1.func.value='3'; document.f1.submit();">
</FORM>

Файл index2.php, указанный здесь в качестве обработчика, покажет какая кнопка была нажата:

<?php
 echo $_REQUEST['func'];
?>

А что произойдёт при нажатии клавиши Enter, а не экранной кнопки для отправки формы? А вот неясно... у меня, например, ни в Файрфоксе, ни в Опере, ни в Internet Explorer - вообще ничего, ну не станут браузеры передавать параметр без type="submit" :)

На самом деле в HTML можно делать и несколько кнопок с TYPE="submit", но тогда по умолчанию всегда работает первая по коду формы, в нашеми случае Submit 1. Если эту первую надо показать "не первой" (например, расположить правее второй) - можно просто выровнять стилями направо.

А может обойтись без стилей и яваскрипта? Подумал было так:

<FORM NAME="f1" action="index2.php" method="post">
<div style="display:none;"><input type="submit" name="default" value="Default"></div>
<input type="text" name="name">
<INPUT TYPE="submit" name="Submit1" VALUE="Submit 1">
<INPUT TYPE="submit" name="Submit2" VALUE="Submit 2">
<INPUT TYPE="submit" name="Submit3" VALUE="Submit 3">
</FORM>

Теперь при нажатии Enter как бы нажимается невидимая кнопка Default. Вот такой index2.php покажет, что передано:

<?php
 foreach ($_REQUEST as $k=>$v) print $k.'=&gt;'.$v.'<br>';
?>

Увы, в ИЕ просто ничего не передаётся, кроме текста из поля ввода, а в Хроме всё равно "нажимается" первая кнопка, только в Опере и Фоксе всё нормально. Вывод - не мудрить, всегда ставить кнопку "действия по умолчанию" первой, ставить сколько надо INPUT TYPE="submit" да и всё :)

06.08.2012, 14:04 [15546 просмотров]


теги: javascript html браузеры вебдезигн

К этой статье пока нет комментариев, Ваш будет первым