是否可以让 cakePHP 处理输入字段的依赖关系?
echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially
并且仅在检查 foo 时才显示和验证 bar ?
是否可以让 cakePHP 处理输入字段的依赖关系?
echo $this->Form->checkbox('foo');
echo $this->Form->input('bar'); //is hidden initially
并且仅在检查 foo 时才显示和验证 bar ?
必要的 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();
?>
其他人已经发布了显示/隐藏字段所需的 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'
)
)
);
使用 JavaScript。您不能使用用于编写 CakePHP 的服务器端编程语言来动态隐藏/显示输入字段。
是的,但是为此你需要使用客户端编程,因为 php 不能这样做 show hide..j 查询是最好的...在 cakephp 中已经有一个功能可以检查这种依赖关系,如果我没记错的话默认情况下,名为 observField as cakephp 使用原型 js。