页面中的 radio、checkbox、select,从数据库获取数据库后给这个方法传值,让相应的值自动 selected,最常用的就时select下拉框了;
大神帮忙优化如下代码(如有优化空间);
(可选)还有我的部分页面还有一些 <li> 组成的导航,如果也能通过传值让<li> addclass('active')的话最好了,一个方法搞定。
/* ----------------
* - 表单组件值自动选择
* ----------------
*/
function setValue(name, value){
var first = name.substr(0,1), input, i = 0, val;
if(value === "") return;
if("#" === first || "." === first){
input = $(name);
} else {
input = $("[name='" + name + "']");
}
if(input.eq(0).is(":radio")) { //单选按钮
input.filter("[value='" + value + "']").each(function(){this.checked = true});
} else if(input.eq(0).is(":checkbox")) { //复选框
if(!$.isArray(value)){
val = new Array();
val[0] = value;
} else {
val = value;
}
for(i = 0, len = val.length; i < len; i++){
input.filter("[value='" + val[i] + "']").each(function(){this.checked = true});
}
} else { //其他表单选项直接设置值
input.val(value);
}
}
this.checked = true
本身没有问题,但是用$(this).prop("checked", true)
可能会好一些(到底好不好我也不确定)另外,你只有设置 true 的情况,那么那些当前选中,给的值又没选中的怎么处理呢?
下面是综合你的代码进行的修改
https://jsfiddle.net/yoeray0d/2/
radio、checkbox、select的根据值的选中应该不需要你那么复杂,简单写了下,仅供参考