Zend Form: элемент флажка отображается как скрытое поле?
Я хотел бы добавить в мою форму простой флажок:
$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/DD, которые имеют метку
внутри DT и скрытый элемент внутри DD (поэтому мой html будет проверять, а скрытые элементы - не занимайте места на странице). Есть ли способ использовать Zend_Form_Element_Checkbox
без отображения скрытого элемента ввода? Я бы предпочел не связываться с моим кодом jQuery, чтобы добавить дополнительные предостережения, но я буду, если мне нужно.
Решение:
По-видимому, я не могу/не должен удалять скрытый элемент перед элементом флажка. Итак, вот мой код 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();
});
Ответы
Ответ 1
Чтобы изменить способ визуализации элемента формы, вы можете использовать decorators, который может быть изменен с помощью
// Overwrite existing decorators with this single one:
$element->setDecorators(array('Composite'));
Для списка всех декораторов по умолчанию вы смотрите стандартные декораторы; для списка декораторов, используемых полями формы, вы можете увидеть стандартные элементы формы.
Мне кажется, что скрытые элементы формы добавляются из Zend с определенной целью, и удаление его (если это возможно) может вызвать некоторые проблемы. Моя первая мысль заключается в том, что Zend использует эту скрытую форму, чтобы проверить, было ли значение изменено, или для проверки того, действительно ли это событие было создано из Zend (эта гипотеза кажется менее правдоподобной).
Ответ 2
тема действительно старая, но я нашел подобную проблему несколько дней назад - я динамически создаю форму, при нажатии javascript (+) добавляется строка (один скрытый ввод, два флажка и два выбора) в отображаемую форму.
Я обнаружил, что когда я отправляю _POST на сервер, эта строка las не отправляется по-разному - отправляются нулевые значения нуля из скрытых, а не выбранные флажки. Решение состоит в том, чтобы установить флажки в виде массивов:
$c = new Zend_Form_Element_Checkbox( 'check1' );
$c->setIsArray( true );
В этом случае дополнительный скрытый ввод не отображается.
PS. Извините за мой английский;)
Ответ 3
Эндрю, вот как действительно скрывать ваши скрытые элементы формы:
$element1 = $form->createElement('hidden', 'element1');
$element1
->setDecorators(array(
'ViewHelper',
array('HtmlTag', array('tag' => 'dd'))
));
Теперь вам не нужно возиться с кодом jQuery, чтобы попытаться уменьшить их. И вам также не нужно беспокоиться о скрытых полях флажков.
Ответ 4
Я просто просматриваю скрытый элемент для флажков. У меня нет решения для сообщения, но я хочу добавить свои мысли о скрытом поле. Это так, если пользователь не проверяет флажок, значение 0 все равно передается. В противном случае флажок не отправлен.
Ответ 5
Поток старый, но ни один из них не является корневым...
У меня была одна и та же проблема, но я понял это, поэтому вот ПРАВИЛЬНЫЙ ответ:
Если вам не нравится ваше значение флажка, выведенное после его снятия и отправки некоторого значения только тогда, когда оно проверено - просто используйте этот код:
$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setRequired();
$chk->setUncheckedValue(null);
$chk->setCheckedValue(1);
...
Проверенное значение - "some_value", но если флажок снят, значение равно null, поэтому оно не проверяется, потому что установлено "required". Это работает для меня сейчас, и нет необходимости использовать "сложные" сценарии jquery для удаления скрытых полей и т.д.
Ответ 6
Вы можете добавить атрибут disableHidden в элемент формы флажка, который не позволяет ему добавлять скрытое поле при рендеринге.
$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setAttrib('disableHidden', true);