input + div 下拉选择框

前台html页面

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>showOptions</title>
    <style type="text/css">
    body
    {
        font-family: Microsoft YaHei;
        font-size: 14px;
    }
    ul li
    {
        list-style-type: none;
        margin-left: -40px;
    }
    #MenuOption
    {
        border: 1px solid #CCCCCC;
        width: 210px;
        margin-top: -10px;
        display: none;
    }
    </style>
    <script src="../../Scripts/jquery-1.9.1.js" type="text/javascript"></script>
    <script src="../../Scripts/jsTest.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            //清空文本框
            $("#txtSelect").val('');
            //展示的数据格式
            var jsonValue = [{ "ManaId": 1, "ManaDisplay": "食品类", "rows": [{ "OptId": 1, "OptName": "肯德基" }, { "OptId": 2, "OptName": "麦当劳"}] }, { "ManaId": 2, "ManaDisplay": "科技类", "rows": [{ "OptId": 3, "OptName": "宇宙飞船" }, { "OptId": 4, "OptName": "神州七号"}]}];
            //调用jsTest.js 中的selectOptions方法 
            var param = {
                "json": jsonValue,
                "MenuOption": "MenuOption", //显示下拉框数据 div 的Id
                "txtSelect": "txtSelect"   //input 文本框的Id
            };
            //调用jsTest.js 中的selectOptions方法
            $("#content").selectOptions(param); 
        });
    </script>
</head>
<body>
   <div style="margin-left: 200px; width: 200px;" id="content">
    <input type="text" id="txtSelect" style="font-family: Microsoft YaHei; width: 210px;font-size: 14px; height: 25px; border: 1px solid #CCCCCC;" />
    <div id="MenuOption">
    </div>
</div>
</body>
</html>

 

 

jsTest.js 文件

(function ($) {
    $.fn.selectOptions = function (options) {
        var defaults = {
            MenuOption: "", //对应html页面中div的Id
            json: "",      //对应html页面的json格式数据
            txtSelect: "" //对应html页面input文本框的Id
        };
        var options = $.extend(defaults, options);   //继承defaults中的参数
        $.each(options.json, function (key, value) { //循环遍历json数据 (简称:第一层数据)
            //动态的添加div元素
            $('<div style="margin-left:20px; margin-top:10px;">' + value.ManaDisplay + '</div>').appendTo("#" + options.MenuOption);
            //动态的添加ul 和li 元素
            var ul = $('<ul class="ulOpt"></ul>').appendTo("#" + options.MenuOption);
            $.each(value.rows, function (key, jsonData) {  //通过第一层数据 循环遍历第二层(rows:[{}])中的数据
                var current;
                var li = $('<li></li>').appendTo(ul)
                    .bind('mouseover', function () {
                        current = $(this).css('background-color');
                        $(this).css('background-color', '#CCCCCC');
                    }).bind('mouseout', function () {
                        $(this).css('background-color', current);
                    });
                //动态的添加div checkbox 元素
                var div = $('<div style="margin-left:50px;"></div>').appendTo(li);
                var chk = $('<input class="chk" type="checkbox" id=' + jsonData.OptId + ' />').appendTo(div)
                    .bind('click', function () {
                        //获选中的checkbox
                        var checked = $("#" + options.MenuOption + " input[type=checkbox]:checked");
                        var checkValue = ',';
                        var checkId = ',';
                        //遍历选中的checkbox并且获取到checkbox 对应的Id 和span中的值
                        $.each(checked, function (key, value) {
                            checkId += $(this).attr('id') + ",";
                            checkValue += $(this).siblings("span").text().replace(/(^\s+)|(\s+$)/g, '') + ","; //剔除空格
                        });
                        checkValue = checkValue.substring(1, (checkValue.length - 1)); //把checkValue前后的',' 逗号 去掉
                        if (checked.length == 0) {
                            checkValue = "";
                        }
                        checkId = checkId.substring(1, (checkId.length - 1)); //获取到checkbox对应的Id的值
                        $("#txtSelect").val(checkValue);

                    });
                var span = $('<span> &nbsp &nbsp' + jsonData.OptName + '</span>').appendTo(div);
            });
        });
        //点击的元素当ID为传进来param 参数中的input的Id(txtSelect) 和显示数据的div的Id(MenuOption) 时显示div 否则隐藏
        $("body").bind('click', function (e) {
            var target = $(e.target);
            if (target.closest("#" + options.MenuOption).length == 0 && target.closest("#" + options.txtSelect).length == 0) {
                $("#" + options.MenuOption).hide();
            } else {
                $("#" + options.MenuOption).show();
            }
            e.stopPropagation();
        });
    };

})(jQuery);

 

下面是一个基于ul和jquery的自定义下拉选择的示例: HTML代码: ```html <div class="select-wrapper"> <input type="hidden" name="select" value=""> <div class="select-box">请选择</div> <ul class="select-options"> <li data-value="1">选项1</li> <li data-value="2">选项2</li> <li data-value="3">选项3</li> <li data-value="4">选项4</li> </ul> </div> ``` CSS代码: ```css .select-wrapper { position: relative; width: 200px; font-size: 14px; color: #333; } .select-box { position: relative; z-index: 1; padding: 10px; border: 1px solid #ccc; border-radius: 3px; cursor: pointer; } .select-options { position: absolute; top: 100%; left: 0; z-index: 2; display: none; margin: 0; padding: 0; list-style: none; background-color: #fff; border: 1px solid #ccc; border-top: none; border-radius: 0 0 3px 3px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); } .select-options li { padding: 10px; cursor: pointer; } .select-options li:hover { background-color: #f5f5f5; } ``` JS代码: ```javascript $(function() { $('.select-box').click(function() { $(this).siblings('.select-options').toggle(); }); $('.select-options li').click(function() { var value = $(this).data('value'); var text = $(this).text(); $(this).closest('.select-wrapper').find('input[type="hidden"]').val(value); $(this).closest('.select-wrapper').find('.select-box').text(text); $(this).closest('.select-options').hide(); }); $(document).click(function(event) { if (!$(event.target).closest('.select-wrapper').length) { $('.select-options').hide(); } }); }); ``` 该示例中,使用了一个包含隐藏输入下拉框按钮和下拉选项的`div`容器作为自定义下拉选择的外层容器。下拉框按钮(`.select-box`)用于打开或关闭下拉选项(`.select-options`),下拉选项为一个`ul`列表,其中每个选项(`li`)都有一个`data-value`属性表示选项的值。 当用户点击某个选项时,使用jQuery将选项的值和文本分别设置到隐藏输入下拉框按钮中,并隐藏下拉选项。 当用户点击页面其它位置时,使用jQuery隐藏所有下拉选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值