Как сделать так, чтобы флажки имели такое же поведение при отправке, как и другие входные данные? - PullRequest
1 голос
/ 10 июня 2010

У меня есть форма поиска, где по умолчанию установлены несколько флажков. Когда форма отправляется в виде GET, URL будет содержать только список флажков, которые были оставлены отмеченными.

http://www.example.com/page/?checkbox1=yes&checkbox2=yes

В этом сценарии сложно определить разницу между тем, когда пользователь впервые попадает на эту страницу поиска, и когда он отправляет форму, когда все флажки сняты, поскольку строки запроса выглядят одинаково.

Чтобы решить эту проблему, я начал вводить скрытое поле перед флажком с тем же именем и значением «нет». Если флажок снят, браузер будет отправлять скрытое поле без значения, а когда флажок установлен, браузер переопределяет скрытое поле со значением флажка «да».

<input type="hidden" name="checkbox1" value="no" />
<input type="checkbox" name="checkbox1" value="yes" />

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

http://www.example.com/page/?checkbox1=no&checkbox2=no

Кажется, это работает на ff, chrome, ie5.5 +, так что я могу использовать этот метод или есть лучший способ заставить флажки отправлять подобные входные данные и выбирать?

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

Это действительно умная идея.Как непроверенный флажок не появляется в запросе, который действительно поможет узнать, вводит ли пользователь форму впервые.

Но знать, что вы можете просто использовать скрытое поле со значением по умолчанию.Поэтому, когда пользователь вводит форму, параметр не устанавливается.Как только он отправит форму, значение будет установлено.

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

<input type="submit" name="submit" />

Эторешить вашу проблему?

0 голосов
/ 10 июня 2010

Как вы говорите, это работает нормально.В качестве альтернативы вы могли бы не заставить его действовать как обычный ввод и просто проверить, существует ли вход (если вход не существует, то обрабатывать его как ложный, если он есть, обрабатывать его как истинный).

Например, в PHP

if (isset ($ _ GET ['checkbox1']) {...}

в ASP.NET

if (Request.QueryString ["checkbox1"]! = Null) {...}

Конечно, у вас, вероятно, есть причины, по которым вы хотите сделать это на стороне клиента.

0 голосов
/ 10 июня 2010

Решить реальную проблему:

определить разницу между тем, когда пользователи впервые попадают на эту страницу поиска и когда они отправляют форму со всеми флажками, не отмеченными

* 1006одно скрытое поле вдоль линий
<input type="hidden" name="submitted" value="true">

Затем вы можете использовать флажки в группах:

<input type="checkbox" name="foo" value="bar" id="foo_bar">
<label for="foo_bar">Bar</label>

<input type="checkbox" name="foo" value="baz" id="foo_baz">
<label for="foo_baz">Baz</label>

Затем вы можете просто зациклить их на сервере.Как вы это сделаете, зависит от вашей серверной среды.В большинстве языков вы можете либо вызвать метод, который возвращает массив данных (библиотеки форм Java IIRC обычно работают таким образом), либо просто запросить данные в контексте массива (библиотеки Perl обычно работают таким образом).PHP является распространенным языком для программирования на стороне сервера и немного странен, он требует, чтобы вы переименовали поля, заканчиваясь символами [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...