基于jQuery, 可多选/可过滤重复/可限制个数

基于jquery, 可多选/可过滤重复/可限制个数. 是以前的项目中用到过的一个项目, 当初是用原生js东拼西凑的, 用jquery重写了下,已封装成插件.暂时没有对手动输入的做判断, 需要的话, 可自行在keyup及change事件中添加相关判断.

<style>
#demo input{_margin-top:1px;padding-left:5px;border:1px solid #999;width:700px;height:20px;font-size:14px;color:#000}
#dropbox{display:none;z-index:9999;padding:5px;background:#fff;border:1px solid #999;border-top:0;z-index:999}
#dropbox a{margin-right:8px;text-decoration:none}
#dropbox a:hover{text-decoration:underline}
#dropbox p{line-height:24px}
#dropbox em.close{float:right;color:#999;font-style:normal;cursor:pointer}
</style>

<div id="dropbox">
 
 <em class="close" title="关闭">关闭</em>
 
 <p><strong>温馨提示:</strong>选择下面的热门标签及使用过的标签,标签将自动排列至表单域。</p>
 
 <p><strong>热门标签:</strong><a href="网页特效:void(0)">时光漫步</a><a href="javascript:void(0)">javascript</a><a href="javascript:void(0)">jquery plugin</a><a href="javascript:void(0)">那一年</a><a href="javascript:void(0)">jquery插件</a><a href="javascript:void(0)">简单</a><a href="javascript:void(0)">星空</a><a href="javascript:void(0)">梦田</a><a href="javascript:void(0)">晴朗</a><a href="javascript:void(0)">mrthink.net</a></p>
 
 <p><strong>您使用过的标签:</strong><a href="javascript:void(0)">许巍</a><a href="javascript:void(0)">sophie zelmani</a><a href="javascript:void(0)">王菲</a><a href="javascript:void(0)">小娟&山谷里的居民</a><a href="javascript:void(0)">ke$ha</a><a href="javascript:void(0)">shakira</a><a href="javascript:void(0)">朴树</a><a href="javascript:void(0)">罗大佑</a></p>
 
</div>
<!--//弹出下拉框-->

<br style="clear:both" />
<br style="clear:both" />
<br />
<input value="我是用来测试的" style="width:200px" />
<select>
 <option>我是用来测试的下拉列表</option> 
 <option>00</option> 
 <option>00</option> 
 <option>00</option> 
</select>

</div>

<input value="我是用来测试的" style="width:200px" />
<select>
 <option>我是用来测试的下拉列表</option> 
 <option>one</option> 
 <option>two</option> 
 <option>three</option> 
</select>

<!--demo end-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
/*******************************
 * @author mr.think
 * @author blog http://mrthink.net/
 * @2010.11.10
 * @可自由转载及使用,但请注明版权归属
 *******************************/
//调用bgiframe,解决ie6下遮住下拉列表的问题
//bgiframe函数 copyright (c) 2006 brandon aaron (http://brandonaaron.net)
;(function($){
$.fn.bgiframe = $.fn.bgiframe = function(s) {
 // this is only for ie6
 if ( $.browser.msie && /6.0/.test(navigator.useragent) ) {
  s = $.extend({
   top     : 'auto', // auto == .currentstyle.bordertopwidth
   left    : 'auto', // auto == .currentstyle.borderleftwidth
   width   : 'auto', // auto == offsetwidth
   height  : 'auto', // auto == offsetheight
   opacity : true,
   src     : 'javascript:false;'
  }, s || {});
  var prop = function(n){return n&&n.constructor==number?n+'px':n;},
      html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
                 'style="display:block;position:absolute;z-index:-1;'+
                  (s.opacity !== false?'filter:alpha(opacity='0');':'')+
            'top:'+(s.top=='auto'?'expression(((parseint(this.parentnode.currentstyle.bordertopwidth)||0)*-1)+'px')':prop(s.top))+';'+
            'left:'+(s.left=='auto'?'expression(((parseint(this.parentnode.currentstyle.borderleftwidth)||0)*-1)+'px')':prop(s.left))+';'+
            'width:'+(s.width=='auto'?'expression(this.parentnode.offsetwidth+'px')':prop(s.width))+';'+
            'height:'+(s.height=='auto'?'expression(this.parentnode.offsetheight+'px')':prop(s.height))+';'+
     '"/>';
  return this.each(function() {
   if ( $('> iframe.bgiframe', this).length == 0 )
    this.insertbefore( document.createelement(html), this.firstchild );
  });
 }
 return this;
};
})(jquery);

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

//插件调用
$(function(){
 $('#demo').iselecttags();
 
 /*
  * 还可以传入参数调用
  $('#test').iselecttags({
  name:'#test',
  drop:$('.drop'),
  ...
 });
  */
  
});
 

 
  

</script>

时间: 2025-01-21 18:36:25

基于jQuery, 可多选/可过滤重复/可限制个数的相关文章

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

标签: 关闭 温馨提示:选择下面的热门标签及使用过的标签,标签将自动排列至表单域. 热门标签:时光漫步JavaScriptjQuery Plugin那一年jQuery插件简单星空梦田晴朗mrthink.net 您使用过的标签:许巍Sophie Zelmani王菲小娟&山谷里的居民Ke$HaShakira朴树罗大佑 我是用来测试的下拉列表000000 我是用来测试的下拉列表onetwothree

基于jQuery实现复选框是否选中进行答题提示_jquery

最近是在项目需求中遇到的功能点,根据用户选择的选项给出相应的提示,下面给出了测试程序的效果图,看看是不是很满意,如果大家觉得还不错,请继续查看全文. 一.实现的原理: 第一步:判断用户选择哪一项,即哪个复选框被选中 第二步:根据复选框的选中情况给出相应的提示 二.下面来看主体程序: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title&

基于jQuery实现在线选座之高铁版_jquery

效果图展示: 查看演示  源码下载 除了电影院在线选座,我们还会接触到飞机机舱选座,当然也有汽车票火车票选座的.假如有一天买火车票也提供在线选座,那么今天我来给大家介绍下如何使用jQuery选座插件完成高铁列车座位布置.选座.不同等级座位计价等操作. HTML 和上一篇文章一样:jQuery在线选座订座(影院篇),我们使用相同的html结构,左侧显示位置布局图,右侧显示选座相关信息. 相关CSS代码请下载DEMO源码查看,本文不再详述. <div class="container"

基于jquery实现在线选座订座之影院篇_jquery

先给大家展示效果图(支持源码下载哦): 查看演示          源码下载 我们在线购票时(如电影票.车票等)可以自己选座.开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付.本文以电影院购票为例,为您展示如何选座.处理选座数据等. 在这里,我给大家介绍一款基于jQuery的在线选座插件:jQuery Seat Charts,它支持自定义座位类型和价格,支持自定义样式,支持设置不可选的座位,也支持键盘控制座位. HTML 我们假设进入电影<星际穿越>的选座页面,页面布局

基于jquery实现复选框全选,反选,全不选等功能_jquery

jquery 实现全选,反选,全不选等功能,下面直接以例子进行说明.设页面有如下一组复选框和几个相关按钮(全选,反选,全不选等): <input type="checkbox" name="fruit" value="apple" />苹果 <input type="checkbox" name="fruit" value="orange" />橘子 <in

基于jQuery实现复选框的全选 全不选 反选功能_jquery

本代码是在众多的jQuery复选框功能代码中精选出来的,本人项目中使用的代码,这里分享给大家. jQuery代码: 复制代码 代码如下:         $(function(){             $("#checkedAll").click(function(){                 $('[name=items]:checkbox').attr('checked',true);             });             $("#check

基于jquery中多选/全选checkbox实例

//全选按钮  代码如下 复制代码 function select_item_all(whochecked,allitem,childitem) {  if(whochecked==true)  {   $('.'+allitem).attr('checked',true);   $('.'+childitem).attr('checked',true);   $('.itemtr').addClass('trselected');  }  else  {   $('.'+allitem).at

jQuery实现在线选座订座(影院篇)

我们在线购票时(如电影票.车票等)可以自己选座.开发者会在页面上列出座次席位,用户可以一目了然的看到可以选择的座位及支付.本文以电影院购票为例,为您展示如何选座.处理选座数据等. 在这里,我给大家介绍一款基于jQuery的在线选座插件:jQuery Seat Charts,它支持自定义座位类型和价格,支持自定义样式,支持设置不可选的座位,也支持键盘控制座位. HTML 我们假设进入电影<星际穿越>的选座页面,页面布局请看上面的大图,页面左边将在#seat-map中显示影院的座位布局图,右侧#b

jquery判断复选框checkbox选中个数

首先引入jquery文件 <script type="text/javascript" src="js/jquery.js"></script> 判断check是否选中 多选框checkbox:  代码如下 复制代码  $("#chk1").attr("checked",'');//不打勾  $("#chk2").attr("checked",true);//打勾