设置触发器
setTrigger('触发表单项名', '触发的值', '触发后显示的表单项名' [, '是否清除原有值'])
| 版本 | 新增功能 |
|---|---|
| 1.0.6 | 支持设置是否清除原有值 |
有时候,选择某些表单项或者填写某个值后,希望显示某些表单项,那么就可以用到触发器了,它可以让你很轻松就实现动态显示和隐藏某些表单项。
比如,我们希望用户选择“广州”之后,显示“邮编”和“电话”两个表单项,选择其他则隐藏这两项。
$list_province = ['gz' => '广州', 'sz' => '深圳', 'sh' => '上海'];return ZBuilder::make('form')->addSelect('city', '城市', '', $list_province)->addText('zipcode', '邮编')->addText('mobile', '电话')->setTrigger('city', 'gz', 'zipcode,mobile')->fetch();
这样设置之后,表单默认不会显示“邮编”和“电话”这两项内容,只有用户选择了“广州”之后,这两项才会显示,选择其他选项,则“邮编”和“电话”会隐藏起来,并清空内容。
也可以设置成,选择“广州”显示“邮编”,选择“深圳”显示“电话”。
$list_province = ['gz' => '广州', 'sz' => '深圳', 'sh' => '上海'];return ZBuilder::make('form')->addSelect('city', '城市', '', $list_province)->addText('zipcode', '邮编')->addText('mobile', '电话')->setTrigger('city', 'gz', 'zipcode')->setTrigger('city', 'sz', 'mobile')->fetch();
上面的写法也可以用数组来设置
$list_province = ['gz' => '广州', 'sz' => '深圳', 'sh' => '上海'];$trigger = [['city', 'gz', 'zipcode'],['city', 'sz', 'mobile'],];return ZBuilder::make('form')->addSelect('city', '城市', '', $list_province)->addText('zipcode', '邮编')->addText('mobile', '电话')->setTrigger($trigger)->fetch();
或者我们希望无论选择“广州”还是“深圳”,都显示“邮编”和“电话”。
$list_province = ['gz' => '广州', 'sz' => '深圳', 'sh' => '上海'];return ZBuilder::make('form')->addSelect('city', '城市', '', $list_province)->addText('zipcode', '邮编')->addText('mobile', '电话')->setTrigger('city', 'gz,sz', 'zipcode,mobile')->fetch();
也可以设置连续触发,比如,选择“广州”则显示“邮编”,“邮编”填写“123”则显示“电话”。
$list_province = ['gz' => '广州', 'sz' => '深圳', 'sh' => '上海'];return ZBuilder::make('form')->addSelect('city', '城市', '', $list_province)->addText('zipcode', '邮编')->addText('mobile', '电话')->setTrigger('city', 'gz', 'zipcode')->setTrigger('zipcode', '123', 'mobile')->fetch();
触发表单项名
目前,触发表单项名仅支持下拉菜单(非多选)、单选、单行文本框这三种表单项类型。
触发的值
触发的值可以写一个,也可以写多个,多个值用逗号隔开。
触发后显示的表单项名
目前不支持普通联动、范围、拖动排序、静态文本这四种表单项类型。
注意,触发后显示的表单项名不能重复,比如下面的例子
->setTrigger('model', '2', 'content,detail_template')->setTrigger('model', '3', 'list_template,detail_template')
原本我们的预期是,当model的值为2时显示content和detail_template,当model的值为3时显示list_template和detail_template。
但事实上当model的值为2时,detail_template会被隐藏,这是因为此时model不是3,所以list_template和detail_template会被隐藏。如果要达到预期的效果,需要改写下规则,将相同的表单项名写在同一个触发内。
->setTrigger('model', '2,3', 'detail_template')->setTrigger('model', '2', 'content')->setTrigger('model', '3', 'list_template')
这样就可以达到我们预期的效果了。
是否清除原有值(1.0.6+)
从1.0.6版本开始,支持设置是否清除原有值。在默认的情况下,会清除原有值。比如:
$list_province = ['gz' => '广州', 'sz' => '深圳', 'sh' => '上海'];return ZBuilder::make('form')->addSelect('city', '城市', '', $list_province)->addText('zipcode', '邮编')->addText('mobile', '电话')->setTrigger('city', 'gz', 'zipcode')->setTrigger('zipcode', '123', 'mobile')->fetch();
当城市的值发生改变时,它所关联的邮编(zipcode)会自动清除掉原有值,如果不希望被清除掉,可以添加第四个参数为false。
$list_province = ['gz' => '广州', 'sz' => '深圳', 'sh' => '上海'];return ZBuilder::make('form')->addSelect('city', '城市', '', $list_province)->addText('zipcode', '邮编')->addText('mobile', '电话')->setTrigger('city', 'gz', 'zipcode', false)->setTrigger('zipcode', '123', 'mobile')->fetch();
这样,不管城市的值如何变,邮编原有的值不会被清除。
