Есть ли способ идентифицировать формы при использовании элемента кнопки для отправки?

Я начал использовать элемент кнопки для отправки моих форм

<button type="submit">Send</button>

Я знаю, что если бы я использовал такой элемент ввода, я мог бы легко определить в PHP, какая форма была отправлена ​​(прочитав значение $_POST['form'] в приведенном ниже примере).

<input type="submit" value="Send" name="form" value="contact" />

Есть ли способ сделать это с помощью элемента кнопки? В каждой форме будет один элемент кнопки. Я знаю, что IE6 имеет проблемы с несколькими элементами кнопок в одной форме, а IE7 отправляет innerHTML вместо значения.

Было бы это надежно?

HTML

<button type="submit" name="form-contact" value="true">Send</button>

PHP

if (isset($_POST['form-contact'])) {
    // Contact Form submitted
}

Большое спасибо


person alex    schedule 02.03.2010    source источник


Ответы (3)


Это не прямой ответ на ваш вопрос, но вы всегда можете использовать скрытые поля ввода, чтобы различать формы:

<form>
<input type="hidden" name="form-name" value="form-1" />
</form>

Другая форма:

<form>
<input type="hidden" name="form-name" value="form-2" />
</form>
person o.k.w    schedule 02.03.2010
comment
Ах да, я знал об этом, просто интересно, смогу ли я уйти с добавлением меньшего количества в мои формы. - person alex; 02.03.2010

Если скрипту, обрабатывающему форму, необходимо различать разные формы, вы должны использовать скрытый ввод, потому что это надежный кросс-браузер. Тестирование имени / значимости кнопки отправки не очень надежно, потому что некоторые браузеры просто не будут отправлять пару имя / значение кнопки отправки, если пользователь отправляет форму с помощью клавиши ввода, в то время как другой элемент формы имеет фокус. Процессоры форм, которые терпят неудачу в этом распространенном сценарии, действительно хромают. button, input type = button и input type = image имеют кроссбраузерные несоответствия.

На самом деле вам редко даже нужен скрытый ввод. Вы можете просто использовать разные имена для разных форм. например, name = contact_email, name = order_email и т. д., а затем просто проверьте, какой из них существует, чтобы определить идентичность формы. Но это становится более сложным, и я лично не думаю, что стоит прилагать дополнительные усилия, когда вы можете просто поместить туда скрытый ввод.

person goat    schedule 02.03.2010

вы можете использовать AJAX для отправки form_name, соответствующего нажатой кнопке, просто вставьте имя формы в URL-адрес

person Ankit Sachan    schedule 02.03.2010
comment
Ajax следует использовать только там, где он повышает удобство использования для пользователя. - person Felix Kling; 02.03.2010