Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Тип ввода = изображение против типа = отправить

Автор вопроса: Phillip SennОтветов: 3

Я долго программировал проверку StructKeyExists(form,"Update"), пока не изменил свой ввод с type="submit" на type="image". IE не отправляет обратно имя элемента управления, когда type="image", а вместо этого отправляет Update.X и Update.Y.

<form method="post">
Old Way:<br />
<input type="submit" value="3" name="Update" /><br />
<input type="submit" value="4" name="Delete" />
<p>New Way:</p>
<input type="image" value="1" name="Update" src="http://www.google.com/intl/en_ALL/images/logo.gif" /><br />
<input type="image" value="2" name="Delete" src="http://images.google.com/intl/en_ALL/images/logos/images_logo_lg.gif" />
</form>

Моей первой мыслью было, что я должен просто добавить два символа в свою логику.

from: <cfif StructKeyExists(form,"Update")
to:   <cfif StructKeyExists(form,"Update.X")

Но мне нужно решение, которое обрабатывает как type="submit", так и type="image". Сейчас моя логика такова:

<cfif StructKeyExists(form,"Update") OR StructKeyExists(form,"Update.X")>
   <!--- UPDATE table --->
<cfelseif StructKeyExists(form,"Delete") OR StructKeyExists(form,"Delete.Y")>
   <!--- DELETE FROM Table --->
</cfif>

В: Есть ли более элегантный способ проверить, какая кнопка была нажата? Предполагая, конечно, что в форме есть более одной кнопки, потому что, если бы мне нужно было только проверить, была ли форма отправлена, я бы проверил, существуют ли form.fieldnames.

htmlcoldfusion

Ответы

Ответ 1 · рейтинг 1 · Bryan Kaiser

Вы также можете просто проверить список полей формы, чтобы увидеть, содержит ли он строку "Обновить". Что-то типа:

<cfif StructKeyExists(form,"fieldnames") and form.fieldnames contains "Update">
<!--- Do Update --->
<cfelseif StructKeyExists(form,"fieldnames") and form.fieldnames contains "Delete">
<!--- Do Delete --->
</cfif>

Form.fieldnames содержит все имена отправленных полей формы.

Ответ 2 · рейтинг 11 · Peter Boughton

Чтобы получить исходные формы Form.Update и Form.Delete с изображением на кнопке, попробуйте следующее:

<form action="somewhere" method="post">
    <button type="submit" name="Update"><img src="update.btn.png" alt="Update"/></button>
    <button type="submit" name="Delete"><img src="delete.btn.png" alt="Delete"/></button>
</form>


Затем вам понадобится CSS, чтобы удалить стиль кнопки по умолчанию, чтобы вы получали только изображение, например:

form button
{
    margin       : 0;
    padding      : 0;
    border-width : 0;
    background   : none;
    cursor       : pointer;
}


И убедитесь, что у вас есть все это с действительным DOCTYPE в самом начале вашего контента, чтобы предотвратить режим причуд. Обычно я добавляю сброс, чтобы убедиться, что это первое, что нужно сделать:

<cfcontent reset/><!DOCTYPE html>

Ответ 3 · рейтинг 2 · Dan Short

Другой вариант - присвоить кнопке изображения другое имя и просто добавить скрытое поле с именем "Обновить", чтобы проверить его значение. Я понимаю, что это может не работать в некоторых особых ситуациях, когда вам нужно проверить, нажата ли конкретная кнопка, но это быстрое решение без необходимости делать что-то необычное для вашего изображения.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы