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;}
分享到:
相关推荐
许多前端库和框架提供了现成的下拉菜单组件,例如Bootstrap的`<select>`插件、jQuery UI的`selectmenu`以及React、Vue、Angular等现代框架的组件库。 综上所述,使用JavaScript模拟`<select>`下拉菜单可以提供更...
为了使代码更模块化,我们还可以将模拟下拉列表的函数封装成一个插件,这样可以在多个页面中复用。 总的来说,使用jQuery模拟下拉列表是一项常见的前端开发任务,它涉及HTML布局、CSS样式设计以及JavaScript事件...
`<select>`用于创建一个下拉列表,而`<option>`则表示列表中的可选项。然而,原生的`<select>`在样式定制和交互性方面有限,因此开发者常常使用jQuery来创建更复杂的下拉菜单替代方案。 在描述中提到的插件,我们...
由于原生`<select>`元素的限制,开发者可以创建自定义的下拉组件,例如使用`<div>`元素模拟下拉列表。这样可以自由地在每个选项中添加图片和文字。使用JavaScript和CSS进行事件监听和样式控制,可以实现与原生下拉...
- 在使用jQuery Mobile Select Menu时,确保页面结构遵循jQuery Mobile的页面模型,即每个页面都包含在一个`<div data-role="page">`内。 - 为了性能考虑,避免在大型`<select>`元素上使用增强样式,因为这可能导致...
标题中提到的“jQuery Select(单选)模拟插件V1.3.62改进版”指出了一款针对jQuery的Select组件进行改进的插件版本。原版本号为V1.3.6,新增的功能是为模拟的Select组件增加了mouseover事件,这允许用户在鼠标悬停时...
在网页设计中,`<select>`元素和其子元素`<option>`经常被用来创建下拉列表,供用户选择。然而,在某些情况下,特别是在固定宽度的`<select>`元素中,如果`<option>`的内容过长,可能会导致内容显示不全,只显示部分...
标题"解决DIV在IE下被下拉列表select穿透的问题(二)"所提及的,是一个典型的IE浏览器特有的问题。这个问题涉及到HTML中的`<div>`元素和`<select>`下拉列表之间的交互,具体表现为在Internet Explorer(特别是旧版本...
jQuery模拟select下拉框插件就是为了克服这些局限性。它通常会用一个`<div>`或其他HTML元素来模拟下拉框,并结合JavaScript和CSS实现动态效果和定制样式。这种插件可以提供更多的定制选项,如分组、搜索、过滤、无限...
一款美化表单下拉列表、复选框等的jquery combobox插件实例 30.站长必备jquery实现combox自动筛选,高亮显示功能 4)菜单 1.jquery+CSS超炫丽横向多级滑动导航菜单 2.jQuery+CSS漂亮蓝色三级菜单下载 3....
这个模拟下拉菜单的方法利用了CSS3来创建箭头的动画效果,使得用户界面更加生动和友好。 首先,我们来看核心的JS代码: ```javascript (function ($) { $.fn.setSelect = function(options){ var opt = $.extend...
具体思路就不说了,比较常规,...用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
4. CSS自定义:由于原始的`<select>`元素样式难以调整,插件可能通过创建额外的DOM结构(如使用`<div>`模拟下拉框)并应用CSS样式来实现美化。理解CSS盒模型、选择器优先级和响应式设计原则,可以帮助你根据需求调整...
在jQuery中,一种常见的实现方式是使用`<input type="checkbox">`和`<label>`元素模拟下拉多选的效果。我们可以将所有选项包装在一个可折叠的容器里,通过点击显示或隐藏这个容器。以下是一个简单的实现步骤: 1. *...
- **下拉列表(Select Menu)**:默认的下拉菜单会被替换为可触摸友好的弹出菜单。 - **滑块(Slider)**:`<input type="range">` 可创建滑块,用于数值选择。 - **按钮(Button)**:`<button>`、`<a>` 添加 `...
1. **显示和隐藏下拉列表**:当用户点击Select组件时,会显示或隐藏下拉列表,通过改变`.self-select-ul` 的`display` 属性实现。 2. **选中项的更新**:当用户在下拉列表中选择一个选项时,对应的文本会更新到`....
在网页设计中,"select下拉框模拟"是一种常见的用户交互元素,用于提供一组选项供用户选择。在传统的HTML中,`<select>`标签被用来创建下拉菜单,但随着前端技术的发展,为了实现更丰富的交互效果和自定义样式,...
在本主题"jQuery输入框下拉选择菜单"中,我们将探讨如何利用jQuery创建一个功能丰富的输入框,当用户点击时,会弹出一个下拉菜单,该菜单具有分页和键盘导航功能,模拟了传统的HTML `<select>` 元素但提供了更高级的...
在网页设计中,`<select>`元素用于创建下拉列表,但其默认样式通常较为简单,不满足现代网页美观的需求。"select美化自定义下拉框样式"项目就是为了解决这个问题,它通过jQuery库来增强`<select>`元素的外观和交互...