layer前端框架,追求极简,喜欢的风格。好看是好看,用起来比较dt,,,,,
今天打算写一个通用的方法:通过ajax请求后台数据,显示在select下拉列表里面。
下面是这个方法:
url:请求的路径
id:要加载数据的select 元素的id.
objName:返回的json对象里的数据名 比如返回的是{msg:'ok',rows:[{'id':1,text:'111'},{id:'2',text:'222'}]} 则应该传入'rows'作为参数
textName:表示对象里面哪个字段作为显示的内容 此处为 'text'
valueName:表示对象里面哪个字段作为select的 value属性值
config:传入的参数
func:回调函数
selValue:下拉列表默认选中的值
function loadSelector(url, id, objName, textName, valueName, config,func,selValue) {
$.post(url,config,function(data) {
if (data.msg == "OK") {
if (data[objName] && data[objName].length > 0) {
var $selector = $('#'+id);
var rows = data[objName];
for ( var row in data[objName]) {
$selector.append('
}
}
}
})
}
var form;
function callback(){
form.render();
}
layui.use([ 'form','element', 'layer' ], function() {
window.element = layui.element(); // 导航的hover效果、二级菜单等功能,需要依赖element模块
window.layer = layui.layer;
form = layui.form();
loadSelector(basePath + '/admin/message/list', 'city', 'rows', 'content','id', {},callback,'52');
}
此方法写好之后,怎么也显示不出来,后来打开调试模式发现,layer将我的select(A)隐藏了,用其他元素(B)替换了,所以在加载select之后,只改变了隐藏的A,却没有改变显示的B,这时就丫悲剧了,还得自己改?看了一下官网的文档,这说明也忒少了点儿吧。。千辛万苦找到一个省市级联动的例子,就是它了。看里面有一个layui.use(['form'],function(){}) 用于加载form模块,否则自己的表单元素不会显示正确,在回调函数里面有form=layui.form();方法,用于获取layui的form对象。而这个方法是通过回调,也就是异步的,不能保证回调的时间是否在使用form对象的的前面,所以要在form加载完成的回调函数里面写form.render()渲染表单元素。主要注意问题就是:
1、select在layui表单里面会被layui自带样式元素替代,而原来的会被隐藏
2、使用layui加载模块时,回调函数是异步的,不一定在你使用时候就已经准备好了。