二級聯動菜單,簡單實現

/**
 * jQuery Linkage Menu
 *
 * Copyright 2014, sunyingyuan
 * QQ: 1586383022
 * Email: [email protected]
 *
 * 二級聯動菜單
 * 目前只能支持二級聯動,並且只能通過AJAX實時從後臺取數據,如果需要前臺靜態數據,請聯繫作者,暫時沒有需求,有時間再添加
 * 簡單使用方法:
 * HTML代碼:
 * <select id="selectOne">
 *      <option>一級菜單默認顯示名稱</option>
 * </select>
 * <select id="selectTwo">
 *      <option>二級菜單默認顯示名稱</option>
 * </select>
 *
 * JS代碼:
 * 引入jQuery和jquery.linkageMenu.js後
 * $(function(){
 *          $.linkageMenu({
 *              'selectOneId': 'selectOne',//一級菜單Id
 *              'selectTwoId': 'selectTwo',//二級菜單Id
 *              'selectOneVal': '{"key1":"value1", "key2":"value2"}',//一級菜單option值
 *              'paramName' : 'selectOneValue',//請求url的參數key
 *              'getSelectTwoValUrl': 'http://localhost:3000/users'//通過一級菜單的value獲取二級菜單的值的url
 *          });
 * });
 */
(function ($) {
    $.linkageMenu = function (options) {
        //默認參數
        var settings = $.extend({
            'selectOneId': 'selectOne',//一級菜單Id
            'selectTwoId': 'selectTwo',//二級菜單Id
            'selectOneVal': '',//一級菜單option值
            'selectTwoVal': '{"key1":"value2","key2":"value2"}',//預留字段,供插件以後擴展
            'paramName' : 'selectOneValue',//請求url的參數key
            'getSelectTwoValUrl': ''//得到二級菜單的value的url
        }, options);
        var $s1 = $("#" + settings.selectOneId);
        var $s2 = $("#" + settings.selectTwoId);
        var selectOneValJSON = $.parseJSON(settings.selectOneVal);
        //alert(selectOneValJSON.key1);
        //JSON.parse(options.selectOneVal); //由JSON字符串轉換爲JSON對象
        //一級菜單初始化
        $.each(selectOneValJSON, function (key, val) {
            appendOptionTo($s1, key, val);
        });
        //一級菜單改變的時候,二級菜單的變化
        $s1.change(function () {
            $s2.html("");
            var s1SelectedVal = $s1.val();
            //ajax異步獲取二級菜單數據
            $.ajax({
                type: "GET",
                url: settings.getSelectTwoValUrl,
                data: settings.paramName + "=" + s1SelectedVal,
                success: function (select2Val) {
                    var selectTwoValJSON = $.parseJSON(select2Val);
                    $.each(selectTwoValJSON, function (key, val) {
                        appendOptionTo($s2, key, val);
                    });
                }
            });
        });
    }
})(jQuery);
/**
 * Tools Methods : appendOptionTo
 * @param $obj : The selected object jquery,一般爲需要添加option的select對象
 * @param key : option的key,一般爲設置的Id
 * @param val ; option的val,同時一般也作爲顯示的值,在這裏我們默認爲顯示的value和option的value是同一個值
 * @param defaultSelectVal ; 設置默認選中的值,一般爲初始化的情況下,默認選中的value
 */
function appendOptionTo($obj, key, val, defaultSelectVal) {
    var $opt = $("<option>").text(key).val(val);
    if (val == defaultSelectVal) {
        $opt.attr("selected", "selected");
    }
    $opt.appendTo($obj);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章