cakePHP - form - 如果选中复选框,则显示并验证另一个字段

时间:2013-02-13 10:21:54

标签: php forms cakephp checkbox dependencies

是否可以让cakePHP处理输入字段的依赖?

echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially

如果选中foo,只显示并验证栏?

5 个答案:

答案 0 :(得分:3)

必要的jQuery(您需要更新代码的类,因为您实际上没有真实姓名)。最初你会想用CSS隐藏吧。

(function(){

    $('#foo').on('change', function() {
        if($(this).is(':checked')) {
            $('#bar').fadeIn();
        }
    });
});

答案 1 :(得分:1)

最好的方法是使用javascript,记住CakePHP只为侧服务器生成PHP代码

<script >
$(document).ready(function(){
$('#MyModelFoo').change(function(){
 if($(this).is(':checked')) {
        $('#MyModelBar').fadeIn();
    }
});
</script>
<?php
echo $this->Form->create('MyModel');
echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially
echo $this->Form->end();
?>

答案 2 :(得分:0)

是的,但是为了那个你需要使用客户端编程,因为php不能做这样的show hide..j查询是最好的...在cakephp中已经有一个功能来检查这种依赖性,如果我是没错,它被称为observField,因为cakephp默认使用原型js。

for more

答案 3 :(得分:0)

使用JavaScript。您无法使用服务器端编程语言动态隐藏/显示输入字段,而CakePHP是用这种语言编写的。

答案 4 :(得分:0)

其他人发布了显示/隐藏字段所需的jQuery,以下是如何在CakePHP中验证它:

在AppModel中:

public function requiredIfChecked($check, $associatedField) {

    $value = array_pop($check);

    if ($this->data[$this->alias][$associatedField] && empty($value)) {

        return false;

    }
    else {

        return true;

    }

}

在验证数组中:

public $validate = array( 
    'bar'=>array(
        'required_if_checked'=>array(
            'rule'=>array('requiredIfChecked', 'foo'),
            'message'=>'cannot be blank if foo is checked'
        )
    )
);