Как обработать «только» видимые поля в форме HTML? - PullRequest
0 голосов
/ 18 мая 2009

Есть ли способ не обрабатывать поля со стилем «display: none»? Поля динамически скрываются с помощью javascript, но обрабатываются как обычно в PHP.

Я ищу решение PHP (без JavaScript).

Ответы [ 7 ]

6 голосов
/ 18 мая 2009

В зависимости от того, как структурирована ваша форма, может оказаться целесообразным удалить атрибут name скрытых входных данных. в любой Javascript, который вы используете, чтобы скрыть ввод, добавьте эту строку:

myInputElement.removeAttribute('name');

Входные данные без имени не отправляются вместе с формой. Если вам может потребоваться вернуться назад (и снова показать входные данные), вы можете подумать о сохранении имени где-нибудь извлекаемым: возможно, используйте тот же name, что и id для каждого элемента, или сохраните его в элементе class атрибут где-то.


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

myInputElement.disabled = true;
2 голосов
/ 18 мая 2009

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

Из W3C:

В этом примере элемент INPUT отключен. Следовательно, он не может получать пользовательский ввод, и его значение не будет отправлено в форме.

1 голос
/ 18 мая 2009

Вы можете использовать javascript, чтобы установить все значения в скрытых полях на ''. При желании библиотека, такая как jQuery, может помочь вам легче выбрать поля на основе вашего стиля (style = "display: none;") ...

0 голосов
/ 18 мая 2009

PHP не может определить, была ли скрыта HTML-форма. Единственными способами являются: А) Сброс имени с помощью JS

Проблема в том, что если вы хотите снова активировать элемент формы, вы теряете имя и должны иметь какой-то способ его хранения, чтобы заменить его.

B) Добавление дополнительного скрытого поля о том, что поле скрыто (снова с JS) Это добавит больше данных в HTTP POST, что может считаться недостатком. Кроме того, вам нужно будет иметь PHP на месте, чтобы проверить, установлен ли «fieldHidden» $ _POST var.

Примером этого может быть создание скрытого элемента с именем «HiddenFields [hiddenFieldName]», а затем использование if array_key_exists с именем проверяемой переменной post.

Это как бы нехорошо, но все равно позволит PHP иметь доступ к переменной, если вы того пожелаете.

C) установка поля только для чтения. (опять же с JS) Это будет работать, я думаю. Но тогда PHP не имеет к нему доступа, что может быть проблемой.

0 голосов
/ 18 мая 2009

Я не уверен, что вы можете сделать это без внесения хотя бы некоторых изменений в Javascript.

Поскольку поля скрыты в браузере (возможно, с использованием CSS), нет возможности PHP-скрипт, который получает форму, чтобы узнать, какие из них скрыты (он не получает текущее состояние CSS), если не помогает javascript.

Я бы порекомендовал, как предлагалось ранее, получить javascript для удаления атрибута name поэтому поля не отправлены.

0 голосов
/ 18 мая 2009

Удалить атрибут имени в различных полях. PHP не будет их обрабатывать.

0 голосов
/ 18 мая 2009

Это можно сделать (используя в качестве примера jQuery), используя селектор: visible, чтобы увидеть, какие элементы формы являются видимыми, а затем либо сериализовать видимые элементы в форму и отправить ее, либо удалить невидимые.

http://docs.jquery.com/Selectors/visible http://docs.jquery.com/Selectors

http://docs.jquery.com/Ajax/serialize http://docs.jquery.com/Ajax

Однако было бы намного проще сделать так, чтобы элементы формы становились пустыми, когда они становились невидимыми, а затем делали их необязательными на стороне сервера.

EDIT Я не могу представить, чтобы PHP не обрабатывал их, если вы не отправите инструкции тем или иным способом. Все, что имеет имя, будет обработано, кроме флажков, которые отмечены отсутствием значения. Насколько я знаю, у PHP нет возможности сказать, каков был видимый статус поля на стороне клиента при отправке формы.

Возможно, вы могли бы добавить имена отключенных / невидимых полей к дополнительному скрытому полю, объединенному запятыми или чем-то подобным, и построить PHP, чтобы не обрабатывать поля, которые в нем появляются. В противном случае вы можете манипулировать именами полей, чтобы начать с proc_ и noproc_ или чем-то еще, и использовать это как инструкцию, обрабатывать ли поле, но опять же вы просто передаете дополнительные инструкции PHP.

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