牛骨文教育服务平台(让学习变的简单)

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();

这样,不管城市的值如何变,邮编原有的值不会被清除。