`
zscomehuyue
  • 浏览: 414658 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jquery-div模拟下拉列表框(Select)插件

 
阅读更多
jquery-div模拟下拉列表框(Select)插件

关键词:Jquery   div 模拟下拉列表框 select

       最近要用到Select标签,但是数据比较多,使用默认的标签必须要下拉框超过一定高度,滚动条才出现,人为的设定下拉框的高度,并不能够达到想要的效果,尝试了一段时间,放弃了这个想法,决定找一个div模拟下拉框的插件,这样不仅能够达到想要的效果,其展示也会更漂亮。

   

       从网络上找到了一个“jQuery Select(单选) 模拟插件 V1.3.6”,功能也比较强,应用到系统中,出了不

少问题,对这个插件进行了一些修改,但并没有达到理想效果,折腾了不少时间,终究还是决定自己写一个。这个功能较为简单,只是简单的模拟出下拉框。

   

    实现比较简单,就是在页面上添加一个宿主input标签,用于存储数据并占位,之后使用div+ul+li模拟一个层,li模拟出排列的option,并对li的点击添加选中事件并处理数据,同时添加一些展示效果。当列表的数值大于8时,我设定了div的高度为150px,用此限定列表框的整体高度,并出现滚动条,这里的8(对应代码_count > 8)及150px我都写死了,可以通过修改该扩展将这两个值做成可配置的,将会更灵活,不过我从整体效果上看了看,高度150px用起来感觉刚好。代码如下:

$.fn.SimulateSelect = function(data, f) {
    var inOb = $(this);
    var currentid = $(this).attr("id");
    var id = 'divSelect' + currentid;
    var width = $(this).width();
    $(this).hide();
    $(this).parent().append('<div id="a_' + id + '"></div>' + '<div id="b_' + id + '"></div>');
    $('#a_' + id).addClass("dropselectbox dropdown").css({
        'width': width - 22
    }).html('').html($(this).val());
    $('#a_' + id).click(function(eb) {
        $('#b_' + id).show();
        try {
            eb.stopPropagation();
        }
        catch (e) {
            event.cancelBubble = true;
        }
    });
    var changeleft = false;
// 这里只针对IE8,其他浏览器无此问题
    if ($.browser.msie)
        changeleft = ($.browser.version) >= 8;
    if (changeleft) {
        $('#b_' + id).addClass("ullist").css({
            'width': width - 16,
            'top': $('#a_' + id).offset().top + 22
        }).hide();
    } else {
        $('#b_' + id).addClass("ullist").css({
            'width': width - 16,
            'top': $('#a_' + id).offset().top + 22,
            'left': $('#a_' + id).offset().left
        }).hide();
    }
    $('<ul style="margin:0;"></ul>').appendTo($('#b_' + id));
    var _count = 0;
    $.each(data.value, function(o, ov) {
        _count++;
        $("<li/>").html(ov).attr('v', ov).click(function(eb) {
            $(inOb).val($(this).attr('v'));
            $('#a_' + id).html('').html($(this).html());
            $("#" + currentid).val($(this).html());
            $('#b_' + id).hide()
            if (f)
                f($(this).attr('v'), $(this).html());
            try {
                eb.stopPropagation();
            }
            catch (e) {
                event.cancelBubble = true;
            }
        }).hover(function() {
            $('#b_' + id).find('li[class=floatred]').removeClass('floatred');
            $(this).addClass('floatred');
            $('#b_' + id).find('li').removeClass("over");
            $(this).addClass("over").addClass("selectedli");
        }, function() {
            $(this).removeClass('floatred');
            $(this).removeClass("over");
        }).appendTo($('#b_' + id + ' ul'));
    });
    // 绑定初始值
    if (data.select != "") {
        $('#a_' + id).html('').html(data.select);
        $("#" + currentid).val(data.select);
    }
    if (_count > {
        $('#b_' + id).find("ul").css("height", "150px");
    }
    var liobj = $('#b_' + id).find('li[v=' + inOb.val() + ']');
    if (liobj.html()) {
        liobj.addClass('floatred');
        $('#a_' + id).html(liobj.html());
    }
    else {
        inOb.val('');
    }
    $(document).click(function() {
        $("#b_" + id).hide();
    });
};

效果如下图:

    使用方法:


1 在页面上声明一个input对象进行占位:


  <input id="selFilter" type="text" style="width: 100px;" readonly="readonly" month="1" />


2 在页面载入时执行一下语句:




$(function() {   
          $("#selFilter").SimulateSelect({value:{1:"2008",2:"2007",3:"2006"},select:''}) 
      });



css,其中还用到了一个小下拉图标,这个随便找一个就行了:



.ullist ul li{text-indent:5px; margin: 0;padding:0; list-style:none; display:block; cursor:default;}
    .ul li.over{}
    .dropselectbox {border:1px solid #ccc;overflow:hidden; display:inline;float:left; padding-left:4px; background-color:#fff;}
    .dropdown {height:21px, font:12px/21px Arial, Helvetica, sans-serif; border:solid 1px #AAA; background:url(../image/arrow.gif) no-repeat right center;}
    .dropdown .over{border-color:#369; background-image:url(../image/droparrowover.gif); }
    .dropdown .current{ border-color:#003;}
    .ullist ul {border:1px solid #aaa; backgruond:#fff; overflow-y :auto}
.ullist ul li{ background:#fff; height:19px; font:400 12px/19px Arial, Helvetica, sans-serif;}
    .ullist ul li.over{background:#369; color:#fff;}
    .ullist {background-color:#fff; position:absolute; overflow-y:auto; overflow-x: hidden; z-index: 20; margin: 0; padding:0;}




分享到:
评论

相关推荐

    JS模拟select下拉菜单

    许多前端库和框架提供了现成的下拉菜单组件,例如Bootstrap的`&lt;select&gt;`插件、jQuery UI的`selectmenu`以及React、Vue、Angular等现代框架的组件库。 综上所述,使用JavaScript模拟`&lt;select&gt;`下拉菜单可以提供更...

    jquery模拟下拉列表,全部功能

    为了使代码更模块化,我们还可以将模拟下拉列表的函数封装成一个插件,这样可以在多个页面中复用。 总的来说,使用jQuery模拟下拉列表是一项常见的前端开发任务,它涉及HTML布局、CSS样式设计以及JavaScript事件...

    jQuery模拟Select下拉菜单选中添加代码

    `&lt;select&gt;`用于创建一个下拉列表,而`&lt;option&gt;`则表示列表中的可选项。然而,原生的`&lt;select&gt;`在样式定制和交互性方面有限,因此开发者常常使用jQuery来创建更复杂的下拉菜单替代方案。 在描述中提到的插件,我们...

    select下拉列表显示图片内容

    在网页设计中,`&lt;select&gt;`元素通常用于创建下拉列表,它允许用户从一组预定义的选项中进行选择。然而,传统的`&lt;select&gt;`标签并不支持直接在选项中显示图片,只支持纯文本内容。但随着现代Web技术的发展,我们可以...

    jQuery手机下拉框select

    - 在使用jQuery Mobile Select Menu时,确保页面结构遵循jQuery Mobile的页面模型,即每个页面都包含在一个`&lt;div data-role="page"&gt;`内。 - 为了性能考虑,避免在大型`&lt;select&gt;`元素上使用增强样式,因为这可能导致...

    jQuery Select(单选) 模拟插件 V1.3.62 改进版

    标题中提到的“jQuery Select(单选)模拟插件V1.3.62改进版”指出了一款针对jQuery的Select组件进行改进的插件版本。原版本号为V1.3.6,新增的功能是为模拟的Select组件增加了mouseover事件,这允许用户在鼠标悬停时...

    解决DIV在IE下被下拉列表select穿透的问题(二)

    标题"解决DIV在IE下被下拉列表select穿透的问题(二)"所提及的,是一个典型的IE浏览器特有的问题。这个问题涉及到HTML中的`&lt;div&gt;`元素和`&lt;select&gt;`下拉列表之间的交互,具体表现为在Internet Explorer(特别是旧版本...

    固定宽度下拉列表select中option内容显示不全问题解决方法

    在网页设计中,`&lt;select&gt;`元素和其子元素`&lt;option&gt;`经常被用来创建下拉列表,供用户选择。然而,在某些情况下,特别是在固定宽度的`&lt;select&gt;`元素中,如果`&lt;option&gt;`的内容过长,可能会导致内容显示不全,只显示部分...

    jQuery模拟select下拉框插件

    jQuery模拟select下拉框插件就是为了克服这些局限性。它通常会用一个`&lt;div&gt;`或其他HTML元素来模拟下拉框,并结合JavaScript和CSS实现动态效果和定制样式。这种插件可以提供更多的定制选项,如分组、搜索、过滤、无限...

    JQuery&CSS;&CSS;+DIV实例大全.rar

    一款美化表单下拉列表、复选框等的jquery combobox插件实例 30.站长必备jquery实现combox自动筛选,高亮显示功能 4)菜单 1.jquery+CSS超炫丽横向多级滑动导航菜单 2.jQuery+CSS漂亮蓝色三级菜单下载 3....

    jQuery模拟select实现下拉菜单功能

    这个模拟下拉菜单的方法利用了CSS3来创建箭头的动画效果,使得用户界面更加生动和友好。 首先,我们来看核心的JS代码: ```javascript (function ($) { $.fn.setSelect = function(options){ var opt = $.extend...

    基于jquery的用dl模拟实现可自定义样式的SELECT下拉列表(已封装)

    具体思路就不说了,比较常规,...用dl模拟实现可自定义样式的SELECT下拉列表@Mr.Think /*reset css*/ body{font-size:0.8em;letter-spacing:1px;font-family:\5fae\8f6f\96c5\9ed1;line-height:1.8em} div,h2,p,fieldset

    jQuery实现select下拉框菜单选中插件.zip

    4. CSS自定义:由于原始的`&lt;select&gt;`元素样式难以调整,插件可能通过创建额外的DOM结构(如使用`&lt;div&gt;`模拟下拉框)并应用CSS样式来实现美化。理解CSS盒模型、选择器优先级和响应式设计原则,可以帮助你根据需求调整...

    Jquery下拉多选

    在jQuery中,一种常见的实现方式是使用`&lt;input type="checkbox"&gt;`和`&lt;label&gt;`元素模拟下拉多选的效果。我们可以将所有选项包装在一个可折叠的容器里,通过点击显示或隐藏这个容器。以下是一个简单的实现步骤: 1. *...

    jqueryMobile 教程+手册+实例

    - **下拉列表(Select Menu)**:默认的下拉菜单会被替换为可触摸友好的弹出菜单。 - **滑块(Slider)**:`&lt;input type="range"&gt;` 可创建滑块,用于数值选择。 - **按钮(Button)**:`&lt;button&gt;`、`&lt;a&gt;` 添加 `...

    jquery制作属于自己的select自定义样式

    1. **显示和隐藏下拉列表**:当用户点击Select组件时,会显示或隐藏下拉列表,通过改变`.self-select-ul` 的`display` 属性实现。 2. **选中项的更新**:当用户在下拉列表中选择一个选项时,对应的文本会更新到`....

    select下拉框模拟

    在网页设计中,"select下拉框模拟"是一种常见的用户交互元素,用于提供一组选项供用户选择。在传统的HTML中,`&lt;select&gt;`标签被用来创建下拉菜单,但随着前端技术的发展,为了实现更丰富的交互效果和自定义样式,...

    jQuery输入框下拉选择菜单

    在本主题"jQuery输入框下拉选择菜单"中,我们将探讨如何利用jQuery创建一个功能丰富的输入框,当用户点击时,会弹出一个下拉菜单,该菜单具有分页和键盘导航功能,模拟了传统的HTML `&lt;select&gt;` 元素但提供了更高级的...

    select美化自定义下拉框样式.zip

    在网页设计中,`&lt;select&gt;`元素用于创建下拉列表,但其默认样式通常较为简单,不满足现代网页美观的需求。"select美化自定义下拉框样式"项目就是为了解决这个问题,它通过jQuery库来增强`&lt;select&gt;`元素的外观和交互...

Global site tag (gtag.js) - Google Analytics