将新的 dhtml内容动态添加到通过Zend_Form生成的表单的最佳方法是什么?例如,假设表单的创建方式如下:
class formUser extends Zend_Form {
public function __construct( $options = null ) {
parent::__construct( $options );
$page1 = new Zend_Form_Element_Text( 'page1' );
$page1->setLabel( 'Page 1' );
$submit = new Zend_Form_Element_Submit( 'submit' );
$this->addElements( array( $page1, $submit ) );
}
}在这里,表单创建一个,也是唯一一个名为"page1“的元素,但是如果我想在视图中添加一个"Add”按钮来动态生成更多的元素,比如page2、page3、page4等,同时将它与Zend_Form集成,又该怎么办呢?
这是我说的效果
这不是我,但他有同样的问题,也许措辞更好
在我的例子中,这实际上是一个孩子和父母的关系。在这个地区,一个人可能有0到15个孩子,我不会提高眉毛。
谢谢!
发布于 2009-02-06 13:41:54
我现在没有时间讨论编码的细节,但是下面是我要做的事情:
由于您希望表单的结构(而不仅仅是数据)是可编辑的,所以必须实例化它并将其存储在会话中。
JavaScript将不得不对服务器进行Ajax调用,而不是仅仅生成一些额外的HTML。单击"add“按钮时,该操作将以这种方式调用,然后将更改会话中的Zend_Form实例存储。Ajax调用可以返回要插入的附加标记或整个表单标记的新版本。
在前一种情况下,由您的JavaScript代码来确保以浏览器显示与服务器上的Zend_Form表示相一致的方式插入标记。在后一种情况下--在返回整个表单的情况下--用户输入必须在Ajax调用中传输,或者在表单被新版本替换时丢失。
发布于 2009-03-22 16:10:19
这里很好地描述了"cg“答案的实现。http://www.jeremykendall.net/2009/01/19/dynamically-adding-elements-to-zend-form/
发布于 2009-02-04 00:46:36
完成任务的一个提示可能是定义一个隐藏输入,在添加新元素时,可以在其中增加“pageNb”。
然后,要筛选和验证表单,可以使用一个循环动态地在控制器中创建元素及其验证要求。
类似于:
// PHP
$userForm = new formUser();
for ($i = 0; $i < $_POST['pageNumber']; ++$i)
{
$element = new Zend_Form_Element_Text('page' . $i);
$element->addValidator('SomeValidator');
$userForm->addElement($element);
}
if ($userForm->isValid($_POST])
{
// bla bla bla
}// Javascript
function addNewInput ()
{
pageNb = document.getElementbyId('pageNb').value;
pageNb.value = ++pageNb;
// here put the trick to create a new node/input element.
newElement.id = pageNb.value;
}https://stackoverflow.com/questions/509112
复制相似问题