Yii2中省市三级联动(栏目联动) [ 2.0 版本 ]
先从表的设计开始:
表的结构:
CREATE TABLE `global_region` (
`region_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`parent_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`region_name` varchar(120) NOT NULL DEFAULT '',
`region_type` tinyint(1) NOT NULL DEFAULT '2',
PRIMARY KEY (`region_id`),
KEY `parent_id` (`parent_id`),
KEY `region_type` (`region_type`)
) ENGINE=MyISAM AUTO_INCREMENT=3409 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of global_region
-- ----------------------------
INSERT INTO `global_region` VALUES ('1', '0', '中国', '0');
INSERT INTO `global_region` VALUES ('2', '1', '北京', '1');
INSERT INTO `global_region` VALUES ('3', '1', '安徽', '1');
INSERT INTO `global_region` VALUES ('4', '1', '福建', '1');
INSERT INTO `global_region` VALUES ('5', '1', '甘肃', '1');
INSERT INTO `global_region` VALUES ('6', '1', '广东', '1');
INSERT INTO `global_region` VALUES ('7', '1', '广西', '1');
INSERT INTO `global_region` VALUES ('8', '1', '贵州', '1');
INSERT INTO `global_region` VALUES ('9', '1', '海南', '1');
INSERT INTO `global_region` VALUES ('10', '1', '河北', '1');
INSERT INTO `global_region` VALUES ('11', '1', '河南', '1');
INSERT INTO `global_region` VALUES ('12', '1', '黑龙江', '1');
这里只贴出来数据库的一部分代码
这个是视图view层代码:
<?=$form->field($model, 'provinces')->dropDownList(ArrayHelper::map(common\models\GlobalRegion::find()->where(['region_type'=>1])->asArray()->all(),'region_id','region_name'),
[
'style'=>'width:150px',
'prompt'=>'请选择省',
'onchange'=>'
$.post("index.php?r=user/lists&id='.'"+$(this).val(),function(data){
$("#user-citys").html("<option value=>请选择市</option>");
$("#user-countrys").html("<option value=>请选择县</option>");
$("#user-citys").append(data);
});',
])->label('省份'); ?>
<?=$form->field($model, 'citys')->dropDownList(ArrayHelper::map(common\models\GlobalRegion::find()->where(['region_type'=>2])->asArray()->all(),'region_id','region_name'),
[
'style'=>'width:150px',
'prompt'=>'请选择市',
'onchange'=>' $.post("index.php?r=user/lists&id='.'"+$(this).val(),function(data){
$("#user-countrys").html("<option value=>请选择县</option>");
$("#user-countrys").append(data);
});',
])->label('市'); ?>
<?=$form->field($model, 'countrys')->dropDownList(ArrayHelper::map(common\models\GlobalRegion::find()->where(['region_type'=>3])->asArray()->all(),'region_id','region_name'),
[
'style'=>'width:150px',
'prompt'=>'请选择县',
'onchange'=>'
$.post("index.php?r=branches/lists&id='.'"+$(this).val(),function(data){
});',
])->label('区/县'); ?>
这里我没有用json,而是直接在后台把option拼出来了,不过我觉得可以试试json,不知道为什么,我用json时遍历时老是出错,回头我再试试
tiandi2050
注册时间:2015-05-25
最后登录:2017-03-28
在线时长:16小时6分
最后登录:2017-03-28
在线时长:16小时6分
- 粉丝10
- 金钱235
- 威望60
- 积分995
共 7 条评论
给个建议,用 DAO 而不是 AR 来查询更高效。而且用 DAO 查出来的直接就是数组了。
好的 我试试 加油 共同进步中
为什么我这样写,onchange里面的函数不执行啊。
onchange里面可以打log追踪吗?
前端新手
这是ajax的写法
@tiandi2050 后来发现拼错了url
对这个地址进行更新的时候,dropdownlist怎么设置选中状态??
$.post("index.php?r=user/lists&id='.'"+$(this).val()这里的index.php?r=user/lists是什么?在哪定义的?
亲,你这个默认出来市和区里的选项都会读出来了吧
城市倒是调出来了,但是选择了省市不会随其改变,求帮助啊
actionLists是什么