javascript - 一段 jQuery 代码是否还有优化或改进其它实现方式的空间?
PHPz
PHPz 2017-04-11 09:10:12
[JavaScript讨论组]

代码如下

/**--------------------
 * - 表单元素值自动选择
 * --------------------
 * @param name 表单元素name值
 * @param value 想要该表单元素自动选择的数据值
 * @author Talent 2016-11-22
 **/
function setInputSelected(name,value){
    var input = $("[name='" + name + "']");
    var inputFirst = input.first();

    if (inputFirst.is(":radio")) {
        input.filter("[value=" + value + "]").prop("checked", true);
    } else if (inputFirst.is(":checkbox")) {
        input.prop("checked", false);
        $(value).each(function() {
            input.filter("[value=" + this + "]").prop("checked", true);
        });
    } else {
        input.val(value);
    }
}

应用场景

一般多为PHP系统的信息修改页面,页面中的checkbox、radio、select,需要根据得到的当前数据的一些值来让他们自动选择上;如下图

这个页面有N个select和一个radio,所以从数据库获取信息后调用上面的方法传值使他们自动选择;如下在页面底部一次传name调用。

<script type="text/javascript">
    setInputSelected("pid", "{$data.pid|default=0}");
    setInputSelected("is_menu", "{$data.is_menu|default=0}");
    setInputSelected("is_dev", "{$data.is_dev|default=0}");
    setInputSelected("status", "{$data.status|default=0}");
</script>

产生的问题:

  1. 页面中有多个元素需要自动选择的时候,有多少setInputSelected就要调用多少次,能否改进成一次调用,搞定所有呢;比如我传name和value的数组进去。

  2. 抛开问题1,上面的代码还有没有优化空间。

PS:感谢各位大神指教,最近在SF学到了好多东西。

PHPz
PHPz

学习是最好的投资!

全部回复(3)
PHP中文网
var data={
"pid":0,
"is_menu":0,
"is_dev":0,
"status":0,
}

$("input").each(function(){
    var name=$(this).attr("name");
    $(this).val(data[name]);
    if($(this).is(":radio") || $(this).is(":checkbox"))
    {
        $(this).attr("checked",true);
    }
});
巴扎黑

直接 $(元素).val(数据)

PHP中文网

如果你观察仔细,在上个问题里我给你的 jsfiddle 上的示例已经给了解决方案了……

https://jsfiddle.net/yoeray0d/2/

// 这里是三组数据,相当于3个测试用例,你实际情况应该是其中一个对象
var groups = [
    {
        sex: 1,
        language: [1, 2, 3],
        education: 2
    },
    {
        sex: 2,
        language: 2,
        education: 3
    },
    {
        sex: 3,
        language: [1, 2, 3, 4],
        education: 4
    }
];


// 这里的 index 主要是为了取用例数据,你可以直接传对象进来,里面也不用 groups[index] 了
function setValues(index) {
    const values = groups[index];
    Object.keys(values).forEach(name => {
        setInputSelected(name, values[name]);
    });
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号