3

花了几个小时在谷歌上爬行,我需要在复选框列表上实现 jQuery 按钮,我遇到的问题是当我输出表单元素时,代码将 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 按钮?

4

4 回答 4

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();

小提琴

于 2013-09-20T15:46:43.347 回答
0

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

PREPEND:在内容之前渲染标签。

APPEND:在内容之后渲染标签。

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

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

所以在你的情况下,我认为你想要预先准备:

$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')),
        ));
于 2013-09-19T14:03:29.347 回答
0

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

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

不知道这在 ZF2 上是如何工作的。

于 2013-09-17T13:17:24.157 回答
0

这里的 getLabel() 方法将帮助您打印标签。

<?php echo $this->formSoftware->checkbox->getLabel();?>
<?php echo $this->formSoftware->checkbox;?>
于 2013-09-24T06:59:38.433 回答