花了几个小时爬过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复选框?
答案 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();
答案 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;?>