Форма Zend: элемент Checkbox отображается как скрытое поле?
Я хотел бы добавить простой флажок в мою форму:
$element = new Zend_Form_Element_Checkbox('dont');
$element->setDescription('Check this box if you don't want to do this action.');
$form->addElement($element);
однако, вот как выглядит html:
<dt id="dont-label"> </dt>
<dd id="dont-element">
<input type="hidden" name="dontAttach" value="0">
<input type="checkbox" name="dontAttach" id="dontAttach" value="1">
<p class="description">Don't attach a bulletin. I only want to send an email.</p>
</dd>
проблема в том, что я использую jQuery, чтобы скрыть все DT/DDs, которые имеют метку
внутри DT и скрытый элемент внутри DD (поэтому мой html будет проверять, и скрытые элементы не занимают места на странице). Есть ли способ использовать Zend_Form_Element_Checkbox
без того, чтобы показать скрытый элемент input? Я бы предпочел не связываться с моим кодом jQuery, чтобы добавить больше предостережений, но я буду, если придется.
устранение:
по-видимому, я не могу/не должен удалять скрытый элемент перед элементом checkbox. Так вот мой код jQuery, чтобы скрыть все скрытые элементы будут отображаться на странице:
//fix zf hidden element from displaying
$('input[type=hidden]').filter(function() {
var noLabel = $(this).closest('dd').prev('dt').html() === ' ';
var onlyChild = $(this).is(':only-child');
if (noLabel && onlyChild) {
return true;
}
return false;
}).each(function() {
$(this).closest('dd').hide()
.prev('dt').hide();
});
6 ответов
чтобы изменить способ отображения элемента формы, вы можете использовать декораторы, который может быть изменен с
// Overwrite existing decorators with this single one:
$element->setDecorators(array('Composite'));
для списка всех декораторов по умолчанию вы смотрите на стандартные декораторы; для списка декораторов, используемых полями формы, вы можете увидеть стандартные элементы вида.
Мне кажется, что скрытые элементы формы добавляются из Zend с точной целью и удаляют ее (если это вообще возможно) могут возникнуть проблемы. Моя первая мысль заключается в том, что Zend использует эту скрытую форму, чтобы проверить, было ли изменено значение, или проверить, действительно ли from был сгенерирован из Zend (эта гипотеза кажется менее правдоподобной).
тема действительно старая, но я нашел аналогичную проблему несколько дней назад - я создаю форму динамически, с помощью javascript - щелчок (+) добавляет строку (один скрытый вход, два флажка и два выбора) в отображаемую форму.
когда я отправляю _POST на сервер, я обнаружил, что строка las не отправляется corectly - вместо выбранных флажков отправляются нули по умолчанию из hidden. Решение состоит в том, чтобы установить флажки как массивы:
$c = new Zend_Form_Element_Checkbox( 'check1' );
$c->setIsArray( true );
в этом случае дополнительный скрытый вход не является оказанный.
PS. Извините за мой английский ;)
Андрей, вот как действительно скрыть скрытые элементы формы:
$element1 = $form->createElement('hidden', 'element1');
$element1
->setDecorators(array(
'ViewHelper',
array('HtmlTag', array('tag' => 'dd'))
));
теперь вам не нужно возиться с кодом jQuery, чтобы попытаться уменьшить их. И вам не нужно беспокоиться о скрытых полях флажков.
Я просто натыкаюсь на скрытый элемент для флажков сам. У меня нет решения для поста, но я хочу добавить в свои мысли о скрытом поле. Это так, если пользователь не устанавливает флажок, значение 0 все еще передается. В противном случае флажок не будет установлен.
поток старый, но ни один ответ не является corrent...
У меня была такая же проблема, но я понял это, поэтому вот правильный ответ:
Если вам не нравится ваше значение флажка, когда оно снято и отправлено некоторое значение только тогда, когда оно проверено - просто используйте этот код:
$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setRequired();
$chk->setUncheckedValue(null);
$chk->setCheckedValue(1);
...
проверенное значение - "some_value", но когда флажок снят, значение равно null, поэтому оно не проверяется, потому что установлено значение "required". Это работает для меня сейчас и есть нет необходимости использовать "сложные" скрипты jquery для удаления скрытых полей и т. д.
вы можете добавить атрибут disableHidden в элемент формы checkbox, который предотвращает добавление скрытого поля во время рендеринга.
$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setAttrib('disableHidden', true);