两、三级联动菜单,简单的实现(2)

两、三级联动菜单,简单的实现(2)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

在上一篇文章中两个联动菜单,简单的实现我写了一个插件,但是只支持两个链接,完好下支持二 、三级联动

/**
 * jQuery Linkage Menu
 *
 * Copyright 2014, sunyingyuan
 * QQ: 1586383022
 * Email: yingyuansun@163.com
 *
 * 二级/三级 联动菜单
 * 支持二级或三级联动。支持页面静态json和AJAX动态从后台获取值
 *
 * 简单用法介绍:
 * HTML代码:
 * <select id="selectOne">
 *      <option>一级菜单默认显示名称</option>
 * </select>
 * <select id="selectTwo">
 *      <option>二级菜单默认显示名称</option>
 * </select>
 * 假设有三级菜单,同上
 *
 * JS代码:
 * 引入jQuery和jquery.linkageMenu.js后
 * 当中jquery.linkageMenu.js必须在jQuery之后引入
 *
 * $(function(){
 *          $.linkageMenu({
 *              'selectOneId': 'selectOne', //一级菜单Id
                'selectTwoId': 'selectTwo', //二级菜单Id
                'selectThreeId': '', //三级菜单Id
                'selectOneVal': '', //一级菜单option值
                'selectTwoVal': '', //二级菜单option值
                'selectThreeVal': '', //三级菜单option值
                'selectOneParam': 'selectOneValue', //向后台获取二级菜单的值时,一级菜单的參数名称,默认是selectOneValue
                'selectTwoParam': 'selectTwoValue', //向后台获取三级菜单的值时,二级菜单的參数名称,默认是selectTwoValue
                'getSelectTwoValUrl': '', //得到二级菜单value的url
                'getSelectThreeValUrl': '' //得到三级菜单value的url
 *          });
 * });
 *
 */
(function ($) {
    $.linkageMenu = function (options) {

        //默认參数
        var settings = $.extend({
            'selectOneId': 'selectOne', //一级菜单Id
            'selectTwoId': 'selectTwo', //二级菜单Id
            'selectThreeId': '', //三级菜单Id
            'selectOneVal': '', //一级菜单option值
            'selectTwoVal': '', //二级菜单option值
            'selectThreeVal': '', //三级菜单option值
            'selectOneParam': 'selectOneValue', //向后台获取二级菜单的值时,一级菜单的參数名称,默认是selectOneValue
            'selectTwoParam': 'selectTwoValue', //向后台获取三级菜单的值时。二级菜单的參数名称。默认是selectTwoValue
            'getSelectTwoValUrl': '', //得到二级菜单value的url
            'getSelectThreeValUrl': '' //得到三级菜单value的url
        }, options);

        var $s1 = $("#" + settings.selectOneId);
        var $s2 = $("#" + settings.selectTwoId);
        var $s3 = $("#" + settings.selectThreeId);

        //一级菜单初始化
        _selectValParseJSON($.parseJSON(settings.selectOneVal), $s1);
        //当一级菜单变化时。二级菜单改变option值
        $s1.change(function () {
            _changeMenu($s1, $s2, settings.selectTwoVal, settings.selectOneParam, settings.getSelectTwoValUrl);
            $s2.change();
        });

        //假设有三级菜单。当二级菜单改变时,三级菜单改变option
        if (settings.selectThreeId) {
            $s2.change(function () {
                _changeMenu($s2, $s3, settings.selectThreeVal, settings.selectTwoParam, settings.getSelectThreeValUrl);
            });
        }

        /**
         * Private Methods : _changeMenu
         *
         * 当select组件的value发生改变时,对下一级select组件value产生的影响,即下一级select组件值的改变
         * @param preSelectIdObj : value发生变化的组件的对象
         * @param folSelectIdObj : 因为变化的组件产生影响的下一级组件的对象
         * @param folSelectMenuVal : 下一级组件的静态值(非AJAX从后台获取数据时用)
         * @param getFolSelectMenuValParam : AJAX获取数据时。向后台请求的參数
         * @param getFolSelectMenuValUrl : AJAX获取数据的URL
         * @private
         */
        function _changeMenu(preSelectIdObj, folSelectIdObj, folSelectMenuVal, getFolSelectMenuValParam, getFolSelectMenuValUrl) {
            //preSelectIdObj.change(function () {
            folSelectIdObj.html("");
            var preSelectedVal = preSelectIdObj.val();
            if (folSelectMenuVal) {
                _selectValParseJSON($.parseJSON(folSelectMenuVal), folSelectIdObj);
                return;
            }
            //ajax异步获取下一级菜单数据
            $.ajax({
                type: "GET",
                url: getFolSelectMenuValUrl,
                data: getFolSelectMenuValParam + "=" + preSelectedVal,
                success: function (val) {
                    _selectValParseJSON($.parseJSON(val), folSelectIdObj);
                }
            });
            //});
        }

        /**
         * Private Methods : _selectValParseJSON
         *
         * 将json填充到指定id的select组件上
         * @param jsonVal : json对象,要填充到select组件上的json对象
         * @param selectId : 要填充的select组件的Id
         * @private
         */
        function _selectValParseJSON(jsonVal, selectId) {
            $.each(jsonVal, function (key, val) {
                _appendOptionTo(selectId, key, val);
            });
        };

        /**
         * Private Methods : _appendOptionTo
         *
         * 将值添加到option组件
         * @param $obj : The selected object jquery,一般为须要加入option的select对象
         * @param key : option的key,一般为设置的Id
         * @param val ; option的val,同一时候一般也作为显示的值,在这里我们默觉得显示的value和option的value是同一个值
         * @param defaultSelectVal ; 设置默认选中的值,一般为初始化的情况下,默认选中的value
         * @private
         */
        function _appendOptionTo($obj, key, val, defaultSelectVal) {
            var $opt = $("<option>").text(key).val(val);
            if (val == defaultSelectVal) {
                $opt.attr("selected", "selected");
            }
            $opt.appendTo($obj);
        }
    };
})(jQuery);

下面为測试HTML

<!DOCTYPE html>
<html>
<head>
    <title>Test Select</title>
    <script src="jquery-1.11.0.js"></script>
    <script src="test.js"></script>
    <script>
$(function(){
    $.linkageMenu({
        'selectOneId': 'selectOne',
        'selectTwoId': 'selectTwo',
        'selectThreeId': 'selectThree',
        'selectOneVal': '{"key1":"value1", "key2":"value2"}',
        //'selectTwoVal': '{"abc":"abc", "abca":"abca"}',
        'selectThreeVal': '{"abc":"abc", "abca":"abca"}',
        'getSelectTwoValUrl': 'http://localhost:8080/getSelect2Val/listAll'
    });
});
</script>
</head>
<body>
	<div>
        <select id="selectOne">
        	<option>一级菜单</option>
        </select>
        <select id="selectTwo">
        	<option>请选择一级菜单</option>
        </select>
        <select id="selectThree">
        	<option>请选择二级菜单</option>
        </select>
    </div>
</body>
</html>

git地址为https://github.com/sunyingyuan/jquery.linkageMenu

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117171.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • go 环境搭建(mac 版)

    go 环境搭建(mac 版)1.下载合适你电脑的版本,下载地址是:https://studygolang.com/dl,我是macm1的,我下载的是https://studygolang.com/dl/golang/go1.17.2.darwin-arm64.pkg如下图:2.下载完成后,双击安装,安装成功后如下图:3.打开终端,输入goversion如果出现版本成功,就是安装成功了,如下图:如果输入命令,说找不到commandnotfound:go的情况解决如下:…

    2022年10月12日
    0
  • ps磨皮滤镜插件Portraiture 3

    ps磨皮滤镜插件Portraiture 3Photoshop必备滤镜插件,Portraiture3formac(ps磨皮滤镜插件)是一款支持自动皮肤平滑、愈合和增强效果的磨皮插件,portraiture3主要针对人像进行皮肤修饰、磨皮润色等处理,还可以平滑和去除缺陷,同时保留皮肤纹理和重要的人像细节,功能十分强大,安装即为激活成功教程版。ps磨皮滤镜插件特色介绍Photoshop的画像消除了选择性蒙版和逐像素处理的繁琐的手工劳动,以帮助您在肖像修饰中实现卓越。Imagenomic发布了Photoshop的磨皮滤镜Portraiture

    2022年7月22日
    12
  • SpringBoot连接MySQL数据库操作

    SpringBoot连接MySQL数据库操作首先,数据库名称:tp_kairui表名称:coursemysql数据库代码:/*NavicatMySQLDataTransferSourceServer:mysqlSourceServerVersion:50529SourceHost:localhost:3306SourceDatabase:tp_kairuiTargetServerType:MYSQLTargetServer.

    2022年6月25日
    44
  • 数据库索引是什么 有什么优缺点

    数据库索引是什么 有什么优缺点数据库索引是什么数据库索引是:数据库索引就像是一本书的目录一样,使用它可以让你在数据库里搜索查询的速度大大提升。而我们使用索引的目的就是,加快表中的查找和排序。索引的几种类型分别是普通索引、唯一索引、聚集索引、主键索引、全文索引几种。使用索引的优点就是:提高数据的搜索速度 加快表与表之间的连接速度 在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所…

    2022年5月18日
    60
  • PLSQL基本操作手册

    PLSQL基本操作手册公众号:池哥搬砖QQ1群:745460286个人WX公号:目录第1章用PLSQL连接Oracle数据库§1.2登录信息保存功能设置:§1.3进入PLSQL后切换数据库连接:第2章PLSQL中编写SQL语句并执行第3章PLSQL中查看数据库表结构§3.1查看表结构:§3.2表结构窗口和SQL编写窗口切换:第4章…

    2022年5月2日
    34
  • ios uiview和calayer_ipad的assistive touch在哪里

    ios uiview和calayer_ipad的assistive touch在哪里IOS笔记CALayer的position和anchorPointCALayer有2个非常重要的属性:position和anchorPoint@propertyCGPointposition;用来设置CALayer在父层中的位置以父层的左上角为原点(0,0)@propertyCGPointanchorPoint;称为”定位点”,“锚点”决定着CALayer身上的哪个点会在poistion属性所指的位置以自己的左上角为原点(0,0)它的x,y取值范围都是0~1默认值为(0.5,0.

    2022年10月8日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号