应同事要求,花了半个小时,写了一个简单的选择颜色的下拉框控件,可以控制输入框指示结果颜色

也贴出来,说不定哪天有用

if (typeof jQuery === 'undefined') { throw 'no jquery'; }
(function () {
window.UE_CONTROL_IDX = 0;
$.fn.GetRect = function () {
var r = $(this).get(0).getBoundingClientRect(),
t = document.documentElement.clientTop,
l = document.documentElement.clientLeft;
return {
top: r.top - t,
bottom: r.bottom - t,
left: r.left - l,
right: r.right - l
}
}
'use strict';
window.UEColorCombox || (window.UEColorCombox = {
config: {
isShowTargetColor:false,
data:['red','green','blue','yellow','black','white'],
style: ''
+ '<style id="ue_colorcombox_style">'
+ ' .ue_colorcombox_frame {border:1px solid #999;border-radius:3px;width:120px;height:auto;overflow:hidden;position:absolute;font-size:12px;user-select:none;margin: 0;padding: 3px;background-color:#fff;display:none;z-index:2;}'
+ ' .ue_colorcombox_item {border:none;width:120px;height:16px;line-height:16px;padding:2px;overflow:hidden;cursor:pointer;}'
+ ' .ue_colorcombox_color {border:none;border-radius:3px;width:32px;height:16px;float:left;cursor:pointer;}'
+ ' .ue_colorcombox_text {border:none;border-radius:3px;width:80px;padding-left:6px;height:16px;line-height:16px;float:left;cursor:pointer;}'
+ ' .ue_colorcombox_target {user-select:true;}'
+ '</style>',
},
showCombox: function () {
var cb = this, list = cb.config.data;
cb.colorComboxDom = cb.colorComboxDom || $('<div class="ue_colorcombox_frame"></div>').appendTo($('body'));
if (cb.colorComboxDom.children().length < 1) {
cb.colorComboxDom.html('');
for (var i = 0; i < list.length; i++) {
var bgcolor = (i % 2) == 0 ? '#fff' : '#eee';
cb.colorComboxDom.append('<div class="ue_colorcombox_item" bgc="' + bgcolor + '" style="background:' + bgcolor + ';"><div class="ue_colorcombox_color" style="background:' + list[i] + ';"></div><div class="ue_colorcombox_text">' + list[i] + '</div></div>');
}
}
cb.colorComboxDom.show();
cb.setComboxPosition();
$('.ue_colorcombox_item').off('click').on('click', function () {
var v = $(this).find('.ue_colorcombox_text').html()
if (cb.config.isShowTargetColor) {
cb.target.css('background-color', v)
}
cb.target.html(v).val(v);
cb.colorComboxDom.hide();
});
$('.ue_colorcombox_text').off('mouseenter').on('mouseenter', function () {
$(this).parent().css('background-color', '#ccc');
$(this).css('background-color', '#ccc');
}).off('mouseleave').on('mouseleave', function () {
var bgc = $(this).parent().attr('bgc');
$(this).parent().css('background-color', bgc);
$(this).css('background-color', bgc);
});
$('.ue_colorcombox_color').off('mouseenter').on('mouseenter', function () {
$(this).parent().css('background-color', '#ccc');
$(this).next().css('background-color', '#ccc');
}).off('mouseleave').on('mouseleave', function () {
var bgc = $(this).parent().attr('bgc');
$(this).parent().css('background-color', bgc);
$(this).next().css('background-color', bgc);
});
},
setComboxPosition: function () {
var ww = $(window).width(),
wh = $(window).height(),
bt = $('body').scrollTop(),
bl = $('body').scrollLeft(),
cw = this.colorComboxDom.outerWidth(),
ch = this.colorComboxDom.outerHeight(),
tw = this.target.outerWidth(),
th = this.target.outerHeight(),
rc = this.target.GetRect();
if ((rc.top + th + ch + 5) < wh) {
this.colorComboxDom.css({ top: rc.top + th });
} else {
this.colorComboxDom.css({ top: rc.top - ch });
}
if ((rc.left + cw) > ww) {
this.colorComboxDom.css({ left: (ww - cw) });
} else {
this.colorComboxDom.css({ left: rc.left });
}
},
bind: function (tg, f) {
if ($('#ue_colorcombox_style').length < 1) {
$(this.config.style).appendTo('head');
}
var id = UE_CONTROL_IDX++;
if (this.config.isShowTargetColor) {
tg.css('background-color', tg.val() || tg.html() || 'white')
}
tg.attr('idx', id).attr('tabindex', id).addClass('ue_date_target')
.off('focus').on('focus', function () {
if ($(this).attr('idx') * 1 != UEColorCombox.idx) {
$('.ue_colorcombox_pop[idx=' + UEColorCombox.idx + ']').remove();
}
UEColorCombox.show(this);
});
},
show: function (tg) {
var c = this.config;
this.target = t = $(tg);
this.idx = t.attr('tabindex') * 1;
c.width = c.width || tg.width();
c.height = c.height || tg.height();
this.showCombox();
},
}); $.fn.bindUEColorCombox = function (f) {
UEColorCombox.bind($(this), f);
}; }());
/* 调用示例
<div id="testDate1" style="width:160px; height:30px; border:1px solid #ddd; ">red</div><br />
<input id="testDate2" style="width:160px; height:30px; border:1px solid #ddd;" value="green" />
<script type="text/javascript">
var dt1 = $('#testDate1').bindUEColorCombox('u');
var dt2 = $('#testDate2').bindUEColorCombox('u');
</script>
*/

基于jquery封装的颜色下拉选择框的更多相关文章

  1. 基于jQuery美化联动下拉选择框

    今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...

  2. FancySelect – 更好用的 jQuery 下拉选择框插件

    FancySelect 这款插件是 Web 开发中下拉框功能的一个更好的选择.FancySelect 使用方便,只要绑定页面上的任何 Select 元素,并调用就 .fancySelect() 就可以 ...

  3. Dropdown.js基于jQuery开发的轻量级下拉框插件

    Dropdown.js 前言 在SPA(Single Page Application)盛行的时代,jQuery插件的轮子正在减少,由于我厂有需求而开发了这个插件.如果觉得本文对您有帮助,请给个赞,以 ...

  4. jquery.chosen.js下拉选择框美化插件项目实例

    由于之前使用的bootstrap-select插件是建立在bootstrap基础上的,实际使用到项目中的时候,与我们使用的ace-admin(基于bootstrap)存在样式冲突,导致下拉框的样式发生 ...

  5. 基于jQuery的input输入框下拉提示层(自动邮箱后缀名)

    基于jQuery的input输入框下拉提示层,方便用户输入邮箱时的提示信息,需要的朋友可以参考下     效果图   // JavaScript Document (function($){ $.fn ...

  6. ul+jquery自定义下拉选择框

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. jQuery插件——下拉选择框

    其实,之前也写过jQuery插件,今天写的是一个模拟select选择的下拉插件. 既然是jQuery插件,那么必然是依赖jQuery的了. 老规矩,直接上代码吧! ;(function () { $. ...

  8. CSS3不一样的下拉选择框

    本例中包含两个下拉选择框的动画示例,本例中并未使用select标签.本例中第一个案例也可用于标题.导航栏等位置. 案例一: html布局 <div class="content&quo ...

  9. combobox级联检索下拉选择框

    1.效果图 2.前端 @{ ViewBag.Title = "Index"; Layout = null; @*自动筛选下拉框*@ <script src="~/S ...

随机推荐

  1. js 循环

    //数组循环var a = [1, 2, 3, 4, 5, 6];for (var i = 0, l = a.length; i < l; i++) { console.log(a[i]);} ...

  2. 今天早上刚刚碰到的一个问题oracle数据归档已满,只能进行内部连接,ORA-00257 archiver error. 错误的处理方法

    archive log 日志已满ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法1. 用sys用户登录  sq ...

  3. [JavaScript]配置日期选择控件

    我选择的日期控件是:bootstrap-datepicker(下载路径:https://github.com/Aymkdn/Datepicker-for-Bootstrap) 比较方便,实用.原来是英 ...

  4. zz剖析为什么在多核多线程程序中要慎用volatile关键字?

    [摘要]编译器保证volatile自己的读写有序,但由于optimization和多线程可以和非volatile读写interleave,也就是不原子,也就是没有用.C++11 supposed会支持 ...

  5. BIOS设置之UEFI/Legacy BIOS切换图文详解

    近几年出现的电脑其中相当一部分都配置了UEFI BIOS,不过大多都默认以Legacy BIOS方式启动.而Win8正式上市后, 所有预装Win8(或Win8.1)的电脑都配置了UEFI BIOS并且 ...

  6. 使用PerfView诊断.Net GC的问题

    PerfView 概述: PerfView是一个可以帮助你分析CPU和内存问题的工具软件.它非常轻量级也不会入侵诊断的程序,在诊断过程中对诊断的程序影响甚微. Visual Studio自带的性能分析 ...

  7. js判断是否绑定了事件。

    if ($._data($("#moreDescription")[0], "events")) { return; }

  8. What's going on in background?

    Did you know that mobile phone manufacturer collect your info without notifying you? Did you know yo ...

  9. lnmp下启动mysql报错 The server quit without updating PID file

    启动时候错误代码:Starting MySQL[FAIL.] The server quit without updating PID file (/var/run/mysqld/mysqld.pid ...

  10. GetStoredProcCommand和GetSqlStringCommand的区别

    原文:http://www.ithao123.cn/content-4004602.html http://hi.baidu.com/847270942/blog/item/c224dd557ff74 ...