DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> jQuery入門知識 >> JQuery特效代碼 >> 基於jquery的選擇標簽至文本域效果,可多選/可過濾重復/可限制個數的實現代碼
基於jquery的選擇標簽至文本域效果,可多選/可過濾重復/可限制個數的實現代碼
編輯: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/
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved