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();
这样,不管城市的值如何变,邮编原有的值不会被清除。