## 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(); ~~~ ### 触发表单项名 目前,触发表单项名仅支持下拉菜单(非多选)、单选、单行文本框这三种表单项类型。 ### 触发的值 触发的值可以写一个,也可以写多个,多个值用逗号隔开。 ### 触发后显示的表单项名 目前不支持普通联动、范围、拖动排序、静态文本这四种表单项类型。 >[danger] 注意,触发后显示的表单项名不能重复,比如下面的例子 ~~~ ->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(); ~~~ 这样,不管城市的值如何变,邮编原有的值不会被清除。