调用方式:$("select[data-class]").selectModel();
;
(function ($, window, document, undefined) {
"use strict";
var pluginName = "selectModel",
defaults = {
effect: {
"type": "standard",
"speed": "fast"
},
emptyMessage: 'Empty',
activeLi:'liActive'
};
function Plugin(element, options) {
this.element = element;
this.options = $.extend({}, defaults, options);
this.instance;
this.init();
}
Plugin.prototype = {
/*
* 初始化
*/
init: function () {
this.instance = this._createInstance();
this._createElements();
this._hideSelect();
this._setEvents();
},
/*
* 产生ID,及是否展开的状态
*/
_createInstance: function () {
return {
selectId: +new Date(),
state: false
};
},
/*
* 隐藏原有select
*/
_hideSelect: function () {
$(this.element).hide();
},
/*
* 设置点击事件
*/
_setEvents: function () {
var self = this;
$(document).on("click", "html", function (e) {
e.stopPropagation();
self._closeSelectBox(true);
});
},
/*
* 模拟select的html结构
*/
_createElements: function () {
var self = this;
var selectModelEl = $('<div/>', {
id: 'selectbox_' + self.instance.selectId,
'class': 'selectbox '+ $(self.element).attr('data-class'),
data: {'sourceElement': self.element}
});
var selectValueWrap = $('<p/>', {
'class': 'select-info like-input'
});
var selectBoxEl = self._createSelectOptionWrap();
var isSelectBoxEmpty = selectBoxEl == null ? true : false;
var selectValueEl = self._createSelectValueWrap(isSelectBoxEmpty);
var selectModelArrowWrap = $('<span/>', {
'class': 'select-arrow'
});
var selectModelArrow = $('<i/>', {
'class': 'ui-arrow-bottom dark-ui-arrow-bottom'
});
selectModelArrowWrap.append(selectModelArrow);
selectValueWrap.append(selectModelArrowWrap).append(selectValueEl);
selectModelEl.append(selectValueWrap).append(selectBoxEl);
self.selectModelEl = selectModelEl;
$(self.element).before(self.selectModelEl);
self._setSelectBoxEvents(isSelectBoxEmpty);
},
/*
* 点击select头部的事件
*/
_setSelectBoxEvents: function (isSelectBoxEmpty) {
var self = this;
var selectModelEl = $("div#selectbox_" + this.instance.selectId);
if (!isSelectBoxEmpty) {
selectModelEl.find(".select-info").click(function (e) {
e.stopPropagation();
self._clickSelectOption();
});
}
},
/*
* 模拟select的option内容
*/
_createSelectOptionWrap: function () {
var self = this;
var selectBoxEl = $('<div/>', {
'class': 'selectbox-drop'
});
var selectBoxOptionsEl = $('<ul/>', {
'class': 'select-results'
});
$(self.element).children().each(function (index) {
var liClass = index==0 ? self.options.activeLi : '';
var selectModelLiEl = $('<li/>', {
rel: $(this).val(),
text: $(this).text(),
'class': liClass,
click: function (e) {
e.stopPropagation();
self._changeSelectValue(self, this);
}
});
selectBoxOptionsEl.append(selectModelLiEl);
});
selectBoxEl.append(selectBoxOptionsEl);
return $(this.element).children().length == 0 ? null : selectBoxEl;
},
_createSelectValueWrap: function (isSelectBoxEmpty) {
var selectValueEl = $('<span/>', {
'class': 'select-value',
text: isSelectBoxEmpty ? this.options.emptyMessage : $(this.element).children().first().text()
});
return selectValueEl;
},
/*
* 模拟select内容的展开与否
*/
_clickSelectOption: function (stageReady) {
if (this.instance.state) {
this._closeSelectBox();
}else {
if (!stageReady) {
this._closeOthers();
}else{
this._openSelectBox();
}
}
},
/*
* 点击模拟select中的option内容
*/
_changeSelectValue: function (self, clickedEl) {
var selectValueEl = $("#selectbox_" + this.instance.selectId).find(".select-value");
selectValueEl.text($(clickedEl).text());
this._closeSelectBox(true);
$(clickedEl).addClass(this.options.activeLi).siblings().removeClass(this.options.activeLi);
$(this.element).val($(clickedEl).attr('rel'));
},
/*
* 关闭模拟select
*/
_closeSelectBox: function (internal) {
$("#selectbox_" + this.instance.selectId).removeClass('selectbox-active active');
var selectBoxEl = $("#selectbox_" + this.instance.selectId).find(".selectbox-drop");
if (selectBoxEl.is(":animated") && !internal) {
return false;
}
this.instance.state = false;
switch (this.options.effect.type) {
case "fade":
selectBoxEl.fadeOut(this.options.effect.speed);
break;
case "slide":
selectBoxEl.slideUp(this.options.effect.speed);
break;
case "standard":
selectBoxEl.hide();
break;
default:
selectBoxEl.slideUp(this.options.effect.speed);
break;
}
},
/*
* 展开模拟select
*/
_openSelectBox: function () {
$("#selectbox_" + this.instance.selectId).addClass('selectbox-active active');
var selectBoxEl = $("#selectbox_" + this.instance.selectId).find(".selectbox-drop");
if (selectBoxEl.is(":animated")) {
return false;
}
this.instance.state = true;
switch (this.options.effect.type) {
case "fade":
selectBoxEl.fadeIn(this.options.effect.speed);
break;
case "slide":
selectBoxEl.slideDown(this.options.effect.speed);
break;
case "standard":
selectBoxEl.show();
break;
default:
selectBoxEl.slideDown(this.options.effect.speed);
break;
}
},
/*
* 关闭其他select
*/
_closeOthers: function () {
var self = this;
$('div[id^=selectbox_]').each(function (index) {
var el = $("div#" + $(this).attr("id"));
if (el.data("sourceElement")) {
var sourceEl = $.data(this, "sourceElement");
var selectModelInst = $.data(sourceEl, "plugin_" + pluginName);
if (self.instance.selectId != selectModelInst.instance.selectId) {
if (selectModelInst.instance.state) {
selectModelInst._closeSelectBox(true);
}
}
}
});
self._clickSelectOption(true);
}
};
$.fn[pluginName] = function (options) {
return this.each(function () {
if (!$.data(this, "plugin_" + pluginName)) {
$.data(this, "plugin_" + pluginName, new Plugin(this, options));
}
});
};
})(jQuery, window, document);
相关推荐
"JQuery DIV模拟下拉框(单选、多选)"就是一种使用JQuery和JavaScript技术,通过`<div>`元素来模拟原生的下拉框,并且支持单选和多选功能的解决方案。 1. **JQuery**:JQuery是一个广泛使用的JavaScript库,它简化...
此时,开发者会利用CSS和JavaScript(通常配合jQuery或其他库)通过`div`元素来模拟下拉框的效果。 1. **CSS基础** CSS是层叠样式表(Cascading Style Sheets)的缩写,用于控制网页元素的样式。在div模拟下拉框中...
使用div模拟下拉框则可以自由调整外观,包括字体、颜色、边框、阴影等,并能实现更丰富的动画效果。 在Demo中,通常会有一个主div作为下拉框的容器,点击时显示或隐藏下拉选项列表。这个列表也是由div组成的,每个...
这种模拟下拉框可以提供更灵活的设计和交互体验。 首先,原生的 HTML 下拉框虽然简单易用,但在某些情况下可能无法满足设计师和开发者的需求,例如自定义样式、多级联动、异步加载选项等。jQuery 提供的解决方案...
在本文中,我们将深入探讨如何使用jQuery来模拟下拉框选择菜单的功能,这对于网页界面设计尤其有用,可以提供更友好的用户体验。下拉框在网页交互中常常用于节省空间并保持页面整洁,尤其是在有很多选项可供选择时。...
模拟下拉框select,之前穿过一个,是纯div和li写的,现在这个的本质还是select,虽然没有经过实验,不过应该不用怕开发的时候取不到值这个问题,修改起来也很简单,只要有点css基础的都应该没有问题~
CSS在模拟下拉框的过程中扮演了关键角色。我们可以通过CSS定义下拉按钮的样式,包括背景色、边框、字体等,同时也可以为显示的选项列表设置样式,如宽度、高度、过渡效果等。例如: ```css .custom-select { ...
jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理和动画等功能,使得开发这样的模拟下拉框变得更加简单。通过jQuery,我们可以轻松地监听用户的行为,如点击事件,然后动态显示或隐藏下拉选项,同时...
【jQuery模拟下拉框详解】 在网页设计中,由于浏览器默认的下拉框样式单一且在某些情况下(如IE6)可能出现显示问题,因此开发者常常选择使用jQuery来模拟自定义样式的下拉框,以提升用户体验和视觉效果。本文将...
js模拟下拉框 使用 只需在jquery后引入jquery.validation文件 [removed][removed] [removed][removed] 初始化 选择元素调用combobox方法传入配置项 $('select').combobox(options); 方法 调用方式 //选择元素调用...
- 解析返回的JSON或XML数据,根据数据结构动态创建新的`<option>`元素,插入到对应的模拟下拉框中。 - 使用`append()`、`html()`等jQuery方法更新DOM结构。 5. **CSS样式定制**: 为了使模拟的下拉框与原生的`...
自定义-js模仿下拉框效果 测过IE6/7/8 ff5.0 chremo 12.0. 是用li来模仿的,隐藏存在一个select方便form提交,其实既然只是获取选定后的数据,也可以用隐藏的input:text 代替 (如果出现什么异常可以给本人留言)
本资源“jQuery模拟select下拉框多选和单选插件.zip”提供了一种利用jQuery实现模拟下拉框选择功能的方法,特别适合在网页中创建具有多选和单选功能的下拉菜单,而无需使用原生的`<select>`元素。这样的插件对于提升...
在IT行业中,JavaScript...在HTML结构中,我们可以用一个普通的`<select>`元素作为基础,然后通过jQuery选择器找到这个元素,调用插件的方法将其转换为我们需要的模拟下拉框。例如: ```html 选项1 选项2 选项3 ...
2. **事件处理**:模拟下拉框需要响应用户的点击事件,这通常涉及到`.click()`或`.change()`事件。当用户点击某个选项或触发其他交互时,事件处理器会更新选择状态并可能同步到后端数据。 3. **CSS样式和动画**:...
在网页设计中,美工有时会因为HTML默认的`<select>`下拉框样式不符合设计需求,特别是默认的下拉箭头图标不美观,而选择使用JavaScript和CSS自定义一个模拟下拉框的效果。本示例是使用jQuery来实现这样一个功能,...
本压缩包中的内容就是一种利用JS来模拟下拉框特效的方法,适用于创建具有自定义样式的下拉菜单。 首先,我们需要理解原生HTML Select的基本结构和属性。一个基本的Select元素包括一个`<select>`标签,其中包含多个`...
首先,我们来看一下这个模拟下拉框的基本原理。通常,HTML的`<select>`元素用于创建下拉列表,但其样式受限。为了获得更灵活的样式控制,开发者通常会选择使用JavaScript和CSS来构建自定义的下拉组件。在这个案例中...
通过`<div>`元素模拟下拉框的容器,`<ul>`或`<ol>`元素模拟选项列表,利用JavaScript处理点击事件和展开收缩逻辑。这样可以实现更丰富的动画效果和自定义布局。 4. **响应式设计**:确保下拉框在不同设备和屏幕尺寸...