输入前Zend表单复选框标签

时间:2013-09-16 12:44:08

标签: jquery zend-framework zend-form

花了几个小时爬过Google,我需要在复选框列表上实现jQuery Button,我遇到的问题是当我输出表单元素时,代码将INPUT插入其中,我需要在标签之外。以下是它的输出方式:

<label for="checkbox-1"><input type="checkbox" name="checkbox[]" id="checkbox-1" value="1" checked="checked">3DCrafter</label>

这是带有装饰器的表单元素:

$checkbox->addMultiOption($prev,$p);
        $checkbox->setAttrib('id', 'checkbox');
        $checkbox->setSeparator('  ');
        $checkbox->setDecorators(array(
           array('ViewHelper'),
           array('Errors', array('tag' => 'div', 'class' => 'error')),
           array('Label', array('tag' => 'span')),
           array('HtmlTag', array('tag' => 'div', 'class' => 'label')),
        ));

下面是我输出表单元素的方法:

<?php echo $this->formSoftware->checkbox;?>

有人有任何想法如何做到这一点?或者在Zend中使用jQuery Button复选框?

4 个答案:

答案 0 :(得分:1)

一个(不太令人满意)解决方案是使用jQuery按预期设置DOM:

//HTML
//the checkboxes are children of their associated label
<div id="container">
    <label for="cb1"><input type="checkbox" id="cb1" name="cb1" />Checkbox 1</label>
    <label for="cb2"><input type="checkbox" id="cb2" name="cb2" checked="checked" />Checkbox 2</label>
    <label for="cb3"><input type="checkbox" id="cb3" name="cb3" />Checkbox 3</label>
</div>

//javascript
//for each label : find its target input among its descendants,
//and place it before the label
$('#container').find('label').each(function () {
    var id = $(this).attr('for');
    $(this).find('#' + id).insertBefore(this);
});

$('#container').buttonset();

fiddle

答案 1 :(得分:0)

如果您正在使用ZF1,我建议您创建一个extends Zend_Form_Decorator_Abstract的自定义Decorator类,并通过向表单添加addElementPrefixPath来注册自定义装饰器的路径。

您的自定义装饰器需要render()方法来输出您想要的标记。

不确定ZF2的工作原理。

答案 2 :(得分:0)

默认情况下,Label装饰器会在提供的内容之前添加;这可以通过指定以下“放置”选项之一来控制:

PREPEND:在内容之前呈现标签。

APPEND:在内容后面呈现标签。

IMPLICIT_PREPEND:在label标签内渲染元素,将标签文本放在内容之前。

IMPLICIT_APPEND:在label标签内渲染元素,将标签文本放在内容之后。

所以在你的情况下,我认为你想要PREPEND:

$checkbox->addMultiOption($prev,$p);
        $checkbox->setAttrib('id', 'checkbox');
        $checkbox->setSeparator('  ');
        $checkbox->setDecorators(array(
           array('ViewHelper'),
           array('Errors', array('tag' => 'div', 'class' => 'error')),
           array('Label', array('tag' => 'span', 'placement' => 'PREPEND')),
           array('HtmlTag', array('tag' => 'div', 'class' => 'label')),
        ));

答案 3 :(得分:0)

这里getLabel()方法将帮助您打印Label。

<?php echo $this->formSoftware->checkbox->getLabel();?>
<?php echo $this->formSoftware->checkbox;?>