基于jquery的选择标签至文本域效果,可多选/可过滤重复/可限制个数的实现代码

 更新时间:2010年11月14日 19:03:21   作者:  
选择标签至表单域插件, 基于jQuery, 可多选/可过滤重复/可限制个数. 是以前的项目中用到过的一个项目, 当初是用原生js东拼西凑的, 用jQuery重写了下,已封装成插件.
暂时没有对手动输入的做判断, 需要的话, 可自行在keyup及change事件中添加相关判断.
相关说明及调用方法,请参见代码中的注释.
演示及代码:

[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]

复制代码 代码如下:

;(function(){
$.fn.extend({
iSelectTags:function(options){
var iset={
name:'.tagsbox',//表单或class或id名
drop:$('#dropbox'),//弹出框定位
pseudoClass:$('#dropbox>p>a'),//可选择的标签定位
close:$('em.close'),//关闭按钮定位
separator:',',//标签间分隔符,建议使用英文逗号
maxCount:10 //默认限制个数,也可以设置表单的data-count值覆盖默认值
}
options = options || {};
$.extend(iset, options);

var _input=$(iset.name);
var _inputVal=_input.val();
var _arr=new Array(); //存放标签的数组
var _left=_input.offset().left; //左绝对距离
var _top=_input.offset().top+_input.outerHeight(); //上绝对距离,此处要加上表单的高度
var _dropW=_input.outerWidth()-parseInt(_input.css('border-left-width'))-parseInt(_input.css('border-right-width'))-parseInt(iset.drop.css('paddingLeft'))-parseInt(iset.drop.css('paddingRight'));
iset.drop.css({'position':'absolute','left':_left+'px','top':_top+'px','width':_dropW+'px'});
//弹出框的宽度,此处计算的是与表单实际宽度相等的.也可以直接在样式中定义.
var _txt=null;
var _maxCount=parseInt(_input.attr('data-count'));//限制选择个数
if(isNaN(_maxCount)){
_maxCount=iset.maxCount
}

_input.click(function(){
iset.drop.show();
iset.drop.bgiframe();//调用bgiframe插件,解决ie6下select的z-index无限大问题
}).bind('keyup change',function(){
//可以在此处扩展手动输入标签情况下的相关判断
//if语句可避免清空重新选择时第一个字符为逗号
if ($(this).val() == '') {
_arr = new Array();
}else {
_arr = $(this).val().split(iset.separator);//当用户手动删除或修改标签值后更新标签值
}
});

$(document).click(function(e){
//点击非弹出框区域时关闭弹出框
//下面的 if语句是用来判断传入的是class还是id
if(iset.name.charAt(0)=='#'){
if(e.target.id!=iset.name.substring(1)){
iset.drop.hide();
}
}else if(iset.name.charAt(0)=='.'){
if(e.target.className!=iset.name.substring(1)){
iset.drop.hide();
}
}
});

iset.drop.click(function(e){
//阻止弹出框区域默认事件
e.stopPropagation();
});

iset.pseudoClass.click(function(){
//标签选择
_txt=$(this).text();
//下面的$.inArray是用来判断是否重复
//若想反馈重复提示或走出限制个数提示,可改进下面的if语句
if(($.inArray(_txt,_arr)==-1) && (_arr.length<_maxCount )){
_arr.push(_txt);
_inputVal=_arr.join(iset.separator);
_input.val(_inputVal);
}

});
//关闭按钮
iset.close.click(function(){
iset.drop.hide();
});
}
});
})(jQuery);

原文发布于Mr.Think的博客:http://mrthink.net/jquery-plugin-iselecttags/

相关文章

  • jQuery的事件委托实例分析

    jQuery的事件委托实例分析

    本文通过具体的实例向我们简单介绍了jQuery的事件委托的实现方式,十分的简单实用,有需要的小伙伴可以参考下。
    2015-07-07
  • JQueryEasyUI框架下的combobox的取值和绑定的方法

    JQueryEasyUI框架下的combobox的取值和绑定的方法

    这篇文章主要介绍了JQueryEasyUI框架下的combobox的取值和绑定的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-01-01
  • JQuery实现简单的服务器轮询效果实例

    JQuery实现简单的服务器轮询效果实例

    这篇文章主要介绍了JQuery实现简单的服务器轮询效果,结合实例形式分析了jQuery的ajax交互结合.net处理实现轮询效果的相关技巧,需要的朋友可以参考下
    2016-03-03
  • jquery实现select选中行、列合计示例

    jquery实现select选中行、列合计示例

    这篇文章主要介绍了jquery如何实现select选中行、列合计示例 ,需要的朋友可以参考下
    2014-04-04
  • 使用jquery.qrcode.min.js实现中文转化二维码

    使用jquery.qrcode.min.js实现中文转化二维码

    本文给大家介绍的是一款jQuery的插件jquery.qrcode.min.js,其主要功能是可以生成二维码,而且可以完美支持中文,下面就给小伙伴们介绍下他的用法
    2016-03-03
  • jQuery为某个div加入行样式

    jQuery为某个div加入行样式

    这篇文章主要为大家详细介绍了jQuery为某个div加入行样式的相关方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 利用jQuery实现WordPress中@的ID悬浮显示评论内容

    利用jQuery实现WordPress中@的ID悬浮显示评论内容

    这篇文章主要介绍了使用JavaScript实现WordPress中ID悬浮显示评论的功能,就是在楼中楼式的评论中显示被评论的主体内容,需要的朋友可以参考下
    2015-12-12
  • jQuery获取样式中的背景颜色属性值/颜色值

    jQuery获取样式中的背景颜色属性值/颜色值

    天使用jQuery获取样式中的background-color的值时发现在获取到的颜色值在IE中与Chrome、Firefox显示的格式不一样,IE中是以HEX格式显示#ffff00,而Chrome、Firefox中则是以GRB格式显示rgb(255,0,0),由于需要将颜色值存储到数据库中,所以想让颜色值的格式统一下(其实不统一也是可以存的)。搜索了一下,从国外的一个网站上得到一段代码
    2012-12-12
  • jquery 为a标签绑定click事件示例代码

    jquery 为a标签绑定click事件示例代码

    jquery 为a标签绑定click事件,当被点击时执行一些动作,示例代码如下,需要的朋友可以参考参考
    2014-06-06
  • jQuery匹配文档链接并添加class的方法

    jQuery匹配文档链接并添加class的方法

    这篇文章主要介绍了jQuery匹配文档链接并添加class的方法,涉及jQuery元素匹配与样式操作的相关技巧,需要的朋友可以参考下
    2015-06-06

最新评论