美文网首页
移动端下拉列表适配

移动端下拉列表适配

作者: StevenLiupz | 来源:发表于2017-08-23 16:11 被阅读0次

    背景

    移动端开发中,使用select做下拉框,会导致ios Android下各种样式的不统一以及表现形式的不统一等问题,因此很少使用原生的select来做下拉框选择,而是选择自己模拟下拉框来实现。

    插件封装

    在网上看了一些别人写的代码,基本上都是这样的,拿过来自己鼓捣了下,记下来方便以后直接使用。如有雷同之处,敬请谅解,有哪些可以改进的还希望路过大神不吝指点。
    废话不多说,先上代码:

    html结构
        <div class="selectBox">
            <input id="course" name="course" type="hidden" value="--请选择--" />
            <div id="courseBox">
                <cite id="courseCite">--请选择--</cite>
                <ul style="display: none;">
                    <li data-input-value="html">html</li>
                    <li data-input-value="css">css</li>
                    <li data-input-value="js">js</li>
                </ul>
            </div> 
        </div>
    

    说明:

    1. html结构中的三处id必须设置;
    js插件代码
          jQuery.selectDiv = function(boxId,inputId,bool){ 
            var selectInput = $(inputId);
            var selectCite = $(boxId+" cite");
            // 下拉列表的显示与隐藏
            selectCite.on("tap click", function(){ 
                var $ul = $(this).next("ul");
                if($ul.css("display") == "none"){
                    $ul.show();
                }else{
                    $ul.hide();
                }
            });
            // 选择框选中后对input的赋值
            $(boxId+" ul li").on("tap click", function(){
                selectCite.html($(this).text());
                selectInput.val($(this).data("inputValue")); // data()方法要求jQuery版本在1.4.3以上
                $(this).parent().hide();
            });
            // 点击任意处弹窗关闭
            $("body").on("tap click", function(e) {    
                if (e.target.id != selectCite.eq(0).attr("id")) { // 考虑到页面中可能会存在多个这样的下拉框,因此在html结构中需要对每个cite设置id,以辨识是哪个下拉框
                    if($(boxId+" ul").css("display") == "block"){
                        $(boxId+" ul").hide();
                    }
                }
            });
            // 默认自动获取第一个值
            if(typeof(bool) === "boolean" && bool){
                selectCite.html($(boxId+" ul li").eq(0).text());
                selectInput.val($(boxId+" ul li").eq(0).data("inputValue"));
            }
        };
    
    调用方式

    $.selectDiv(boxId, inputId, [bool]);
    该方法可以接收三个参数:
    boxId: 用于模拟select的下拉框盒子的id
    inputId: 用于接收下拉选项的值的input元素的id
    bool: 是否给下拉框设置默认值,是则设置为true,否可以不传该参数

    $.selectDiv("#courseBox","#course",true); // 默认设置下拉框的值为第一个下拉项的值
    $.selectDiv("#courseBox","#course");
    

    其实,功能很简单,只是为了记录下来方便以后直接使用。

    相关文章

      网友评论

          本文标题:移动端下拉列表适配

          本文链接:https://www.haomeiwen.com/subject/dkaddxtx.html