cakePHP-form-if复选框被选中显示并验证另一个字段

cakePHP-form-if复选框被选中显示并验证另一个字段,php,forms,cakephp,checkbox,dependencies,Php,Forms,Cakephp,Checkbox,Dependencies,是否可以让cakePHP处理输入字段的依赖关系 echo $this->Form->checkbox('foo'); echo $this->Form->input('bar'); //is hidden initially 如果选中了foo,则仅显示和验证栏?是的,但为此,您需要使用客户端编程,因为php无法执行这样的显示隐藏..j Query是最好的…在cakephp中,已经有一个功能可以检查这种依赖性,如果我没有错的话,它被称为observField,因为cake

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

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

如果选中了foo,则仅显示和验证栏?

是的,但为此,您需要使用客户端编程,因为php无法执行这样的显示隐藏..j Query是最好的…在cakephp中,已经有一个功能可以检查这种依赖性,如果我没有错的话,它被称为observField,因为cakephp默认使用prototype js


是的,但是你需要使用客户端编程,因为php不能做这样的显示隐藏..j查询是最好的…在cakephp中,已经有一个功能来检查这种依赖性,如果我没有错的话,它被称为observField,因为cakephp默认使用prototype js

必要的jQuery(您需要更新代码的类,因为您实际上没有输入真实名称)。最初,您需要使用CSS隐藏工具栏

(function(){

    $('#foo').on('change', function() {
        if($(this).is(':checked')) {
            $('#bar').fadeIn();
        }
    });
});
必要的jQuery(您需要更新代码的类,因为您实际上没有输入真实的名称)。最初,您需要使用CSS隐藏工具栏

(function(){

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

最好的方法是使用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();
?>

$(文档).ready(函数(){
$('#MyModelFoo').change(function(){
如果($(this).is(':checked')){
$('#MyModelBar').fadeIn();
}
});

最好的方法是使用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();
?>

$(文档).ready(函数(){
$('#MyModelFoo').change(function(){
如果($(this).is(':checked')){
$('#MyModelBar').fadeIn();
}
});

使用JavaScript。不能使用服务器端编程语言动态隐藏/显示输入字段,而CakePHP是使用该语言编写的。

使用JavaScript。不能使用服务器端编程语言动态隐藏/显示输入字段,而CakePHP是使用该语言编写的。

其他人发布了显示/隐藏输入字段所需的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'
        )
    )
);

其他人发布了显示/隐藏字段所需的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'
        )
    )
);

好的,所以我不能在模型中定义?不,反正不是实时的。不过你只需要3行jQuery。没什么大不了的。好的,jQuery我知道如何处理!你应该确保验证仍然在服务器端处理,以防有人试图在关闭JS的情况下使用你的表单,即使你也使用JS进行验证。好的,所以我不能在服务器端定义e模型?不,不是实时的。不过你只需要3行jQuery。没什么大不了的。好吧,jQuery我知道如何处理!你应该确保验证仍然在服务器端处理,以防有人试图在关闭JS的情况下使用你的表单,即使你也使用JS进行验证。observeField不是很旧吗?我不应该使用jsHelper-ins吗tead?你可以,我只是暗示了你可以做什么。我还告诉过你使用jquery,这样也可以。observeField不是很旧吗?我不应该改用jsHelper吗?你可以,我只是暗示了你可以做什么。我还告诉过你使用jquery,这样也可以。