CakePHP 从选择框更改中更新多个表单字段

Posted

技术标签:

【中文标题】CakePHP 从选择框更改中更新多个表单字段【英文标题】:CakePHP update multiple form fields from selectbox change 【发布时间】:2013-01-17 19:56:01 【问题描述】:

我正在使用 Cakephp 2.2。我正在采用一种动态更新我从中获得的选择框的方法:http://www.willis-owen.co.uk/2011/11/dynamic-select-box-with-cakephp-2-0/#comment-10773,它可以正常工作。当用户从另一个选择框中选择“区域”时,它会更新“酒店”选择框的内容。

在同一个表单上,当用户从选择框中选择“酒店”时,我想使用“酒店”模型中的地址详细信息自动填充多个“团队”字段。

然后用户可以修改地址......所有这些都在用户点击“团队”添加视图上的提交之前。

在 Team\add.ctp 视图中,我有以下代码:

    echo "<div id='address'>";
    echo $this->Form->input('address_1');
    echo $this->Form->input('address_2');
    echo $this->Form->input('address_3');
    echo $this->Form->input('city');
    echo $this->Form->input('postcode');
    echo $this->Form->input('country');
    echo "</div>";

...

    $this->Js->get('#TeamHotelId')->event('change',
        $this->Js->request(array(
            'controller'=>'hotels',
            'action'=>'getAddress'
            ), array(
            'update'=> '#address',
            'async' => true,
            'method' => 'post',
            'dataExpression' => true,
            'data'=> $this->Js->serializeForm(array(
                'isForm' => true,
                'inline' => true))
                        )
        )
    );

在我的 HotelsController.php 中有:

public function getAddress() 
    $hotel_id = $this->request->data['Team']['hotel_id'];
    CakeLog::write('debug', print_r($hotel_id, true));
    $address = $this->Hotel->find('first', array(
            'recursive' => -1,
            'fields' => array('hotel.address_1', 'hotel.address_2', 'hotel.address_3', 'hotel.city', 'hotel.postcode', 'hotel.country'),
            'conditions' => array('Hotel.id' => $hotel_id)
            ));
    CakeLog::write('debug', print_r($address, true));
    $this->set('hotels', $address);
    $this->set(compact('address'));
    $this->layout = 'ajax';
   

酒店\get_address.ctp:

    <?php 
        echo $this->Form->input('Team.address_1', array('value'=> $address['Hotel']['address_1']));
        echo $this->Form->input('Team.address_2', array('value'=> $address['Hotel']['address_2']));
        echo $this->Form->input('Team.address_3', array('value'=> $address['Hotel']['address_3']));
        echo $this->Form->input('Team.city', array('value'=> $address['Hotel']['city']));
        echo $this->Form->input('Team.postcode', array('value'=> $address['Hotel']['postcode']));
        echo $this->Form->input('Team.country', array('value'=> $address['Hotel']['country'])); ?>

现在可以使用,并且代码已更新。

【问题讨论】:

【参考方案1】:

你不能像你试图完成的那样那样做。但是,有一种方法可以通过使用 ajax 从下拉列表中传递一个 id 并根据该 id 填充所有其他字段来根据需要进行更新。请确保在'update'=&gt;#id 中,您应该将包含您想要显示的所有字段的 div 的 div id 放在您希望内容出现在 ajax 请求上的页面上。

注意:请点击您提供的 Richard 链接,即 www.willis-owen.co.uk,它肯定会对您尝试做的事情有所帮助。

【讨论】:

我越来越近了。我已将 getAddress() 更改为仅返回我需要的 6 个字段。在我的 add.ctp 中,我将 放在 6 个字段周围。我已经更改了“更新”=>“#address”。现在,当我选择一家酒店时,这 6 个字段消失了。 好的。这意味着 ajax 正在工作,而你就在附近。请确保您的 getAddress() 操作必须输出使用它的结果。还要确保你的 in firebug (in firefox) 控制台 ajax 返回什么。 IN firebug 我看到 getAddress() 不能输出正确的内容格式。 IMO 你应该使用你的第一个代码 sn-p 即 echo "";...echo "";进入 get_Address.ctp 而不是 add.ctp。让我知道结果是什么 添加了 $this->set(compact('address')); getAddrsss() 但div中的数据不会提交

以上是关于CakePHP 从选择框更改中更新多个表单字段的主要内容,如果未能解决你的问题,请参考以下文章

在同一页面中克隆选择框选项值

使用 Web API 和 AngularJS 保存表单数据(选择列表)

使用多个相互构建的组合框过滤表单

查找记录的组合框正在显示多个字段

当用户从选择框中选择选项时更改输入字段的值

基于单选按钮选择 laravel 的文本框值更改