Zend Form: элемент флажка отображается как скрытое поле? - PullRequest
11 голосов
/ 22 декабря 2009

Я хотел бы добавить простой флажок к моей форме:

$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">&nbsp;</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, которые имеют метку &nbsp; внутри DT и скрытый элемент внутри DD (поэтому мой HTML будет проверен, а скрытые элементы не не занимать место на странице). Есть ли способ использовать Zend_Form_Element_Checkbox без отображения скрытого элемента ввода? Я бы предпочел не связываться с моим кодом jQuery, чтобы добавить больше предостережений, но я сделаю это, если придется.

Решение:

Видимо, я не могу / не должен удалять скрытый элемент перед элементом checkbox. Итак, вот мой код jQuery, чтобы скрыть все скрытые элементы формы от отображения на странице:

//fix zf hidden element from displaying
$('input[type=hidden]').filter(function() {
    var noLabel = $(this).closest('dd').prev('dt').html() === '&nbsp;';
    var onlyChild = $(this).is(':only-child');
    if (noLabel && onlyChild) {
        return true;
    }
    return false;
}).each(function() {
    $(this).closest('dd').hide()
           .prev('dt').hide();
});

Ответы [ 6 ]

5 голосов
/ 06 октября 2010

Тема действительно старая, но я обнаружил похожую проблему несколько дней назад - я создаю форму динамически, с помощью javascript - нажатие (+) добавляет строку (один скрытый ввод, два флажка и два выбора) к отображаемой форме.

Я обнаружил, что когда я отправляю _POST на сервер, эта строка las не отправляется корректно - вместо выбранных флажков отправляются нули по умолчанию из скрытых. Решение состоит в том, чтобы установить флажки в виде массивов:

$c = new Zend_Form_Element_Checkbox( 'check1' );
$c->setIsArray( true );

В этом случае дополнительный скрытый ввод не отображается.

PS. Извините за мой английский;)

5 голосов
/ 22 декабря 2009

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

// Overwrite existing decorators with this single one:
$element->setDecorators(array('Composite'));

Чтобы просмотреть список всех декораторов по умолчанию, посмотрите стандартные декораторы ; для списка декораторов, используемых полями формы, вы можете увидеть стандартные элементы формы .

Мне кажется, что скрытые элементы формы добавляются из Zend с точной целью, и удаление этого (если это вообще возможно) может вызвать некоторые проблемы. Сначала я подумал, что Zend использует эту скрытую форму, чтобы проверить, было ли изменено значение, или чтобы убедиться, что from действительно было сгенерировано из Zend (эта гипотеза кажется менее правдоподобной).

1 голос
/ 01 апреля 2015

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

$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setAttrib('disableHidden', true);
1 голос
/ 10 февраля 2012

Тема старая, но ни одного ответа нет.

У меня была такая же проблема, но я понял это, поэтому вот ПРАВИЛЬНЫЙ ответ:

Если вам не нравится, когда значение вашего флажка публикуется, когда оно не отмечено, и отправляет какое-либо значение только тогда, когда оно проверено - просто используйте этот код:

$chk = new Zend_Form_Element_Checkbox('test_checkbox');
$chk->setRequired();
$chk->setUncheckedValue(null);
$chk->setCheckedValue(1);
...

Проверяемое значение равно «some_value», НО, когда флажок снят, значение равно нулю, поэтому оно не проверяется, поскольку установлено значение «required». Пока это работает для меня, и нет необходимости использовать «сложные» скрипты jquery для удаления скрытых полей и т. Д.

1 голос
/ 25 августа 2011

Я просто наткнулся на скрытый элемент для флажков сам. У меня нет решения для поста, но я хочу добавить свои мысли о скрытом поле. Это так, если пользователь не устанавливает флажок, значение 0 все еще передается. В противном случае флажок не установлен.

1 голос
/ 22 декабря 2009

Андрей, вот как действительно скрыть свои скрытые элементы формы:

$element1 = $form->createElement('hidden', 'element1');
$element1
  ->setDecorators(array(
    'ViewHelper',
    array('HtmlTag', array('tag' => 'dd'))
  ));

Теперь вам не нужно связываться с кодом jQuery, чтобы попытаться уменьшить его. И вам не нужно беспокоиться о скрытых полях флажков.

...