0

我在一个 DIV 上有一个选择下拉菜单,并希望用户进行选择,当发生这种情况时,根据他们选择的选择,下面的 DIV 上会出现一个不同的表单。想要做到这一点而不必发帖(页面刷新)。

这是我的 /views/scripts/postjob/index.phtml

<div id="post_job">
<?php echo $this->form->setAction($this->url()); ?>
</div>
<div id="display">

</div>

这是控制器

class PostJobController extends Zend_Controller_Action
{

public function init()
{
    /* Initialize action controller here */
}

public function indexAction()
{
    $form = new Application_Form_DivForm();

    $business = new Application_Form_BusinessCardForm();
    $calendar = new Application_Form_CalendarForm();
    $brochure = new Application_Form_BrochureForm();
    $this->view->form=$form;       

}


}

现在这是我的 /forms/DivForm

class Application_Form_DivForm extends Zend_Form
{
public function init()
{

    $this->setName("Business Card");
    $this->setMethod('post');   

    $this->addElement('select','type',
        array(
        'label'        => 'Post Job (select)',
        'onchange'      => 'showForm(this.value)',
        'value0'        => 'Select',
        'multiOptions' => array(
        'value1'    => 'Business Cards',
        'value2'   => 'Calendars',
        'value3'  => 'Brochures',
    ),
)
);


}

}

我确信有不止一种方法可以做到这一点,但试图找到一些简单的方法。也许只是将一个变量从 index.phtml 传递回控制器,然后我可以执行 if 语句并选择要在视图中包含的表单。

4

2 回答 2

0

这实际上在 PHP 中很简单,在 ZF 操作中更容易(我还没有做 JS)。我经常用 PHP 做这种事情,(我希望你不介意刷新)。

在控制器动作中完成这一点只是一个简单的开关:

public function IndexAction()
    {
        $form = new Application_Form_DivForm();
        $form->setAction('/postjob/index');
        $this->view->form=$form;

        //put in the if->isPost() and if->isValid() as needed.
        switch ($form->getValue('type')) {
            case ('Business Cards'):
                $this->view->form2 = new Application_Form_BusinessCardForm();
                break;
            case ('Calendars'):
                $this->view->form2 = new Application_Form_CalendarForm();
                break;
             case ('Brochures'):
                $this->view->form2 = new Application_Form_BrochureForm();
                break;
            default:
                $this->view->form2 = '';
                break;
        }
    }

你的观点可能是这样的:

<div id="post_job">
    <?php echo $this->form ?>
</div>
<div id="display">
    <?php if (!empty($this->form2)): ?>
    <?php echo $this->form2 ?>
    <?php endif ?>
</div>

像这样的东西可能会起作用,我希望它有所帮助。

于 2012-08-28T05:33:32.280 回答
0

能够使用 AJAX 回发到另一个控制器操作,然后将数据返回到 AJAX 来解决这个问题。当所有这些子表单都被动态创建时,仍然必须弄清楚如何提交所有这些子表单。

于 2012-08-30T22:01:49.970 回答