基于jquery的選擇標簽至文本域效果,可多選/可過濾重復/可限制個數(shù)的實現(xiàn)代碼
更新時間:2010年11月14日 19:03:21 作者:
選擇標簽至表單域插件, 基于jQuery, 可多選/可過濾重復/可限制個數(shù). 是以前的項目中用到過的一個項目, 當初是用原生js東拼西湊的, 用jQuery重寫了下,已封裝成插件.
暫時沒有對手動輸入的做判斷, 需要的話, 可自行在keyup及change事件中添加相關判斷.
相關說明及調用方法,請參見代碼中的注釋.
演示及代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
;(function(){
$.fn.extend({
iSelectTags:function(options){
var iset={
name:'.tagsbox',//表單或class或id名
drop:$('#dropbox'),//彈出框定位
pseudoClass:$('#dropbox>p>a'),//可選擇的標簽定位
close:$('em.close'),//關閉按鈕定位
separator:',',//標簽間分隔符,建議使用英文逗號
maxCount:10 //默認限制個數(shù),也可以設置表單的data-count值覆蓋默認值
}
options = options || {};
$.extend(iset, options);
var _input=$(iset.name);
var _inputVal=_input.val();
var _arr=new Array(); //存放標簽的數(shù)組
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'));//限制選擇個數(shù)
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){
//點擊非彈出框區(qū)域時關閉彈出框
//下面的 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){
//阻止彈出框區(qū)域默認事件
e.stopPropagation();
});
iset.pseudoClass.click(function(){
//標簽選擇
_txt=$(this).text();
//下面的$.inArray是用來判斷是否重復
//若想反饋重復提示或走出限制個數(shù)提示,可改進下面的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);
原文發(fā)布于Mr.Think的博客:http://mrthink.net/jquery-plugin-iselecttags/
相關說明及調用方法,請參見代碼中的注釋.
演示及代碼:
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
復制代碼 代碼如下:
;(function(){
$.fn.extend({
iSelectTags:function(options){
var iset={
name:'.tagsbox',//表單或class或id名
drop:$('#dropbox'),//彈出框定位
pseudoClass:$('#dropbox>p>a'),//可選擇的標簽定位
close:$('em.close'),//關閉按鈕定位
separator:',',//標簽間分隔符,建議使用英文逗號
maxCount:10 //默認限制個數(shù),也可以設置表單的data-count值覆蓋默認值
}
options = options || {};
$.extend(iset, options);
var _input=$(iset.name);
var _inputVal=_input.val();
var _arr=new Array(); //存放標簽的數(shù)組
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'));//限制選擇個數(shù)
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){
//點擊非彈出框區(qū)域時關閉彈出框
//下面的 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){
//阻止彈出框區(qū)域默認事件
e.stopPropagation();
});
iset.pseudoClass.click(function(){
//標簽選擇
_txt=$(this).text();
//下面的$.inArray是用來判斷是否重復
//若想反饋重復提示或走出限制個數(shù)提示,可改進下面的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);
原文發(fā)布于Mr.Think的博客:http://mrthink.net/jquery-plugin-iselecttags/
相關文章
jquery lazyload延遲加載技術的實現(xiàn)原理分析
懶加載技術(簡稱lazyload)并不是新技術,它是js程序員對網(wǎng)頁性能優(yōu)化的一種方案。lazyload的核心是按需加載。在大型網(wǎng)站中都有l(wèi)azyload的身影,例如谷歌的圖片搜索頁,迅雷首頁,淘寶網(wǎng),QQ空間等。2011-01-01jQuery動態(tài)生成不規(guī)則表格(前后端)
這篇文章主要介紹了jQuery動態(tài)生成不規(guī)則表格的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下2017-02-02jQuery動態(tài)創(chuàng)建元素以及追加節(jié)點的實現(xiàn)方法
下面小編就為大家?guī)硪黄猨Query動態(tài)創(chuàng)建元素以及追加節(jié)點的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10jQuery實現(xiàn)的指紋掃描效果實例(附演示與demo源碼下載)
這篇文章主要介紹了jQuery實現(xiàn)的指紋掃描效果,以完整實例形式分析了jQuery實現(xiàn)圖像按照指定模式顯示的相關實現(xiàn)技巧,并附帶附示例演示與demo源碼供讀者下載參考,需要的朋友可以參考下2016-01-01jQuery插件zepto.js簡單實現(xiàn)tab切換
這篇文章主要介紹了jQuery插件zepto.js簡單實現(xiàn)tab切換的代碼,十分的簡潔,有需要的小伙伴可以參考下2015-06-06jQuery查找和過濾_動力節(jié)點節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了jQuery查找和過濾的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07