1 |
- (function(factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else{factory(jQuery)}})(function($){"use strict";var defaults={data:undefined,lang:"cn",multiple:false,pagination:true,listSize:10,multipleControlbar:true,maxSelectLimit:0,selectToCloseList:true,initRecord:undefined,dbTable:"tbl",keyField:"id",showField:"name",searchField:undefined,andOr:"AND",orderBy:undefined,pageSize:10,params:undefined,formatItem:undefined,focusDropList:true,autoSelectFirst:true,autoFillResult:true,noResultClean:true,selectOnly:false,inputDelay:.5,eSelect:undefined,eAjaxSuccess:undefined,eTagRemove:undefined,eClear:undefined};var SelectPage=function(input,option){var option=$.extend({},option,$(input).data());$.each({data:"source",keyField:"primaryKey",showField:"field",pageSize:"perPage"},function(i,j){if(typeof option[j]!=="undefined"){option[i]=option[j];delete option[j]}});this.setOption(option);this.setLanguage();this.setCssClass();this.setProp();this.setElem(input,option);this.setButtonAttrDefault();this.setInitRecord();this.eDropdownButton();this.eInput();this.eWhole()};SelectPage.version="2.7";SelectPage.dataKey="selectPageObject";SelectPage.objStatusKey="selectPage-self-mark";SelectPage.objStatusIndex="selectPage-self-index";SelectPage.prototype.setOption=function(option){option.searchField=option.searchField===undefined?option.showField:option.searchField;option.andOr=option.andOr.toUpperCase();if(option.andOr!=="AND"&&option.andOr!=="OR")option.andOr="AND";var arr=["searchField"];for(var i=0;i<arr.length;i++){option[arr[i]]=this.strToArray(option[arr[i]])}option.orderBy=option.orderBy===undefined?option.searchField:option.orderBy;option.orderBy=this.setOrderbyOption(option.orderBy,option.showField);if(option.multiple&&!option.selectToCloseList){option.autoFillResult=false;option.autoSelectFirst=false}if($.type(option.data)==="string"){option.autoSelectFirst=false}if(!option.pagination)option.pageSize=200;if($.type(option.listSize)!=="number"||option.listSize<0)option.listSize=10;this.option=option};SelectPage.prototype.strToArray=function(str){if(!str)return"";return str.replace(/[\s ]+/g,"").split(",")};SelectPage.prototype.setOrderbyOption=function(arg_order,arg_field){var arr=[],orders=[];if(typeof arg_order=="object"){for(var i=0;i<arg_order.length;i++){orders=$.trim(arg_order[i]).split(" ");arr[i]=orders.length==2?orders:[orders[0],"ASC"]}}else{orders=$.trim(arg_order).split(" ");arr[0]=orders.length==2?orders:orders[0].match(/^(ASC|DESC)$/i)?[arg_field,orders[0]]:[orders[0],"ASC"]}return arr};SelectPage.prototype.setLanguage=function(){var message;switch(this.option.lang){case"de":message={add_btn:"Hinzufügen-Button",add_title:"Box hinzufügen",del_btn:"Löschen-Button",del_title:"Box löschen",next:"Nächsten",next_title:"Nächsten"+this.option.pageSize+" (Pfeil-rechts)",prev:"Vorherigen",prev_title:"Vorherigen"+this.option.pageSize+" (Pfeil-links)",first_title:"Ersten (Umschalt + Pfeil-links)",last_title:"Letzten (Umschalt + Pfeil-rechts)",get_all_btn:"alle (Pfeil-runter)",get_all_alt:"(Button)",close_btn:"Schließen (Tab)",close_alt:"(Button)",loading:"lade...",loading_alt:"(lade)",page_info:"num_page_top - num_page_end von cnt_whole",select_ng:"Achtung: Bitte wählen Sie aus der Liste aus.",select_ok:"OK : Richtig ausgewählt.",not_found:"nicht gefunden",ajax_error:"Bei der Verbindung zum Server ist ein Fehler aufgetreten."};break;case"en":message={add_btn:"Add button",add_title:"add a box",del_btn:"Del button",del_title:"delete a box",next:"Next",next_title:"Next"+this.option.pageSize+" (Right key)",prev:"Prev",prev_title:"Prev"+this.option.pageSize+" (Left key)",first_title:"First (Shift + Left key)",last_title:"Last (Shift + Right key)",get_all_btn:"Get All (Down key)",get_all_alt:"(button)",close_btn:"Close (Tab key)",close_alt:"(button)",loading:"loading...",loading_alt:"(loading)",page_info:"num_page_top - num_page_end of cnt_whole",select_ng:"Attention : Please choose from among the list.",select_ok:"OK : Correctly selected.",not_found:"not found",ajax_error:"An error occurred while connecting to server."};break;case"cn":message={add_btn:"添加按钮",add_title:"添加区域",del_btn:"删除按钮",del_title:"删除区域",next:"下一页",next_title:"下"+this.option.pageSize+" (→)",prev:"上一页",prev_title:"上"+this.option.pageSize+" (←)",first_title:"首页 (Shift + ←)",last_title:"尾页 (Shift + →)",get_all_btn:"获得全部 (↓)",get_all_alt:"(按钮)",close_btn:"关闭 (Tab键)",close_alt:"(按钮)",loading:"读取中...",loading_alt:"(读取中)",page_info:"num_page_top - num_page_end (共 cnt_whole)",select_ng:"请注意:请从列表中选择.",select_ok:"OK : 已经选择.",not_found:"无查询结果",ajax_error:"连接到服务器时发生错误!"};break;case"es":message={add_btn:"Agregar boton",add_title:"Agregar una opcion",del_btn:"Borrar boton",del_title:"Borrar una opcion",next:"Siguiente",next_title:"Proximas "+this.option.pageSize+" (tecla derecha)",prev:"Anterior",prev_title:"Anteriores "+this.option.pageSize+" (tecla izquierda)",first_title:"Primera (Shift + Left)",last_title:"Ultima (Shift + Right)",get_all_btn:"Ver todos (tecla abajo)",get_all_alt:"(boton)",close_btn:"Cerrar (tecla TAB)",close_alt:"(boton)",loading:"Cargando...",loading_alt:"(Cargando)",page_info:"num_page_top - num_page_end de cnt_whole",select_ng:"Atencion: Elija una opcion de la lista.",select_ok:"OK: Correctamente seleccionado.",not_found:"no encuentre",ajax_error:"Un error ocurrió mientras conectando al servidor."};break;case"pt-br":message={add_btn:"Adicionar botão",add_title:"Adicionar uma caixa",del_btn:"Apagar botão",del_title:"Apagar uma caixa",next:"Próxima",next_title:"Próxima "+this.option.pageSize+" (tecla direita)",prev:"Anterior",prev_title:"Anterior "+this.option.pageSize+" (tecla esquerda)",first_title:"Primeira (Shift + Left)",last_title:"Última (Shift + Right)",get_all_btn:"Ver todos (Seta para baixo)",get_all_alt:"(botão)",close_btn:"Fechar (tecla TAB)",close_alt:"(botão)",loading:"Carregando...",loading_alt:"(Carregando)",page_info:"num_page_top - num_page_end de cnt_whole",select_ng:"Atenção: Escolha uma opção da lista.",select_ok:"OK: Selecionado Corretamente.",not_found:"não encontrado",ajax_error:"Um erro aconteceu enquanto conectando a servidor."};break;case"ja":message={add_btn:"追加ボタン",add_title:"入力ボックスを追加します",del_btn:"削除ボタン",del_title:"入力ボックスを削除します",next:"次へ",next_title:"次の"+this.option.pageSize+"件 (右キー)",prev:"前へ",prev_title:"前の"+this.option.pageSize+"件 (左キー)",first_title:"最初のページへ (Shift + 左キー)",last_title:"最後のページへ (Shift + 右キー)",get_all_btn:"全件取得 (下キー)",get_all_alt:"画像:ボタン",close_btn:"閉じる (Tabキー)",close_alt:"画像:ボタン",loading:"読み込み中...",loading_alt:"画像:読み込み中...",page_info:"num_page_top - num_page_end 件 (全 cnt_whole 件)",select_ng:"注意 : リストの中から選択してください",select_ok:"OK : 正しく選択されました。",not_found:"(0 件)",ajax_error:"サーバとの通信でエラーが発生しました。"};break}this.message=message};SelectPage.prototype.setCssClass=function(){var css_class={container:"sp_container",container_open:"sp_container_open",re_area:"sp_result_area",control_box:"sp_control_box",element_box:"sp_element_box",navi:"pagination",results:"sp_results",re_off:"sp_results_off",select:"sp_over",select_ok:"sp_select_ok",select_ng:"sp_select_ng",selected:"sp_selected",input_off:"sp_input_off",message_box:"sp_message_box",disabled:"sp_disabled",button:"sp_button",btn_on:"sp_btn_on",btn_out:"sp_btn_out",input:"sp_input",clear_btn:"sp_clear_btn"};this.css_class=css_class};SelectPage.prototype.setProp=function(){this.prop={current_page:1,max_page:1,is_loading:false,xhr:false,key_paging:false,key_select:false,prev_value:"",selected_text:"",last_input_time:undefined};this.template={tag:{content:'<li class="selected_tag" itemvalue="#item_value#">#item_text#<span class="tag_close">×</span></li>',textKey:"#item_text#",valueKey:"#item_value#"}}};SelectPage.prototype.setElem=function(combo_input,option){var elem={};var orgWidth=$(combo_input).outerWidth();elem.combo_input=$(combo_input).attr({autocomplete:"off"}).addClass(this.css_class.input).wrap("<div>");if(option.selectOnly)$(elem.combo_input).prop("readonly",true);elem.container=$(elem.combo_input).parent().addClass(this.css_class.container);if($(elem.combo_input).prop("disabled")){if(option.multiple)$(elem.container).addClass(this.css_class.disabled);else $(elem.combo_input).addClass(this.css_class.input_off)}elem.button=$("<div>").addClass(this.css_class.button);elem.dropdown=$('<span class="bs-caret"><span class="caret"></span></span>');elem.clear_btn=$("<div>").append("×").addClass(this.css_class.clear_btn).attr("title","清除内容");elem.element_box=$("<ul>").addClass(this.css_class.element_box);if(option.multiple&&option.multipleControlbar)elem.control=$("<div>").addClass(this.css_class.control_box);elem.result_area=$("<div>").addClass(this.css_class.re_area);if(option.pagination)elem.navi=$("<ul>").addClass(this.css_class.navi).addClass("hide");elem.results=$("<ul>").addClass(this.css_class.results);var namePrefix="_text";var input_id=$(elem.combo_input).attr("id")!==undefined?$(elem.combo_input).attr("id"):$(elem.combo_input).attr("name");var input_name=$(elem.combo_input).attr("name")!==undefined?$(elem.combo_input).attr("name"):"selectPage";var hidden_name=input_name,hidden_id=input_id;if(input_name.match(/\]$/))input_name=input_name.replace(/\]?$/,namePrefix);else input_name+=namePrefix;if(input_id.match(/\]$/))input_id=input_id.replace(/\]?$/,namePrefix);else input_id+=namePrefix;elem.hidden=$('<input type="hidden" class="sp_hidden" />').attr({name:hidden_name,id:hidden_id}).val("");$(elem.combo_input).attr({name:input_name,id:input_id});$(elem.container).append(elem.button).append(elem.result_area).append(elem.hidden);$(elem.button).append(elem.dropdown);$(elem.result_area).append(elem.results);if(option.pagination)$(elem.result_area).append(elem.navi);if(option.multiple){if(option.multipleControlbar){$(elem.control).append('<button type="button" class="btn btn-default sp_select_all" ><i class="fa fa-check-square-o"></i> 全选本页</button>');$(elem.control).append('<button type="button" class="btn btn-default sp_unselect_all" ><i class="fa fa-square-o"></i> 取消本页</button>');$(elem.control).append('<button type="button" class="btn btn-default sp_clear_all" ><i class="fa fa-ban"></i> 清除全部</button>');$(elem.result_area).prepend(elem.control)}$(elem.container).addClass("sp_container_combo");$(elem.combo_input).addClass("sp_combo_input").before($(elem.element_box));var li=$("<li>").addClass("input_box");$(li).append($(elem.combo_input));$(elem.element_box).append($(li));if($(elem.combo_input).attr("placeholder"))$(elem.combo_input).attr("placeholder_bak",$(elem.combo_input).attr("placeholder"))}this.elem=elem};SelectPage.prototype.setButtonAttrDefault=function(){$(this.elem.button).attr("title",this.message.get_all_btn);$(this.elem.button).attr("title",this.message.close_btn)};SelectPage.prototype.setInitRecord=function(refresh){var self=this;if($.type($(self.elem.combo_input).data("init"))!="undefined")self.option.initRecord=String($(self.elem.combo_input).data("init"));if(!self.option.initRecord)if($(self.elem.combo_input).val())self.option.initRecord=$(self.elem.combo_input).val();$(self.elem.combo_input).val("");if(refresh&&$(self.elem.hidden).val()||$.type(self.option.initRecord)==="string"){if(!refresh)$(self.elem.hidden).val(self.option.initRecord);if(typeof self.option.data==="object"){var data=new Array;var keyarr=refresh?$(self.elem.hidden).val().split(","):self.option.initRecord.split(",");$.each(keyarr,function(index,row){for(var i=0;i<self.option.data.length;i++){if(self.option.data[i][self.option.keyField]==row){data.push(self.option.data[i]);break}}});if(!self.option.multiple&&data.length>1)data=null;self.afterInit(self,data)}else{$.ajax({dataType:"json",type:"POST",url:self.option.data,data:{searchTable:self.option.dbTable,searchKey:self.option.keyField,searchValue:refresh?$(self.elem.hidden).val():self.option.initRecord,field:self.option.showField,order_by:self.option.orderBy,pkey_name:self.option.keyField,pkey_value:refresh?$(self.elem.hidden).val():self.option.initRecord},success:function(returnData){var data;if(self.option.eAjaxSuccess&&$.isFunction(self.option.eAjaxSuccess)){data=self.option.eAjaxSuccess(returnData)}else{data=returnData}self.afterInit(self,data.list)},error:function(jqXHR,textStatus,errorThrown){self.ajaxErrorNotify(self,errorThrown)}})}}};SelectPage.prototype.afterInit=function(self,data){if(!data)return;if(!$.isArray(data))data=[data];if(data.length===0)return;var getText=function(row){var text=row[self.option.showField];if(self.option.formatItem&&$.isFunction(self.option.formatItem)){try{text=self.option.formatItem(row)}catch(e){}}return text};if(self.option.multiple){self.clearAll(self);$.each(data,function(i,row){var item={text:getText(row),value:row[self.option.keyField]};if(!self.isAlreadySelected(self,item))self.addNewTag(self,item)});self.tagValuesSet(self);self.inputResize(self)}else{var row=data[0];$(self.elem.combo_input).val(getText(row));$(self.elem.hidden).val(row[self.option.keyField]);self.prop.prev_value=getText(row);self.prop.selected_text=getText(row);if(self.option.selectOnly){$(self.elem.combo_input).attr("title",self.message.select_ok).removeClass(self.css_class.select_ng).addClass(self.css_class.select_ok)}self.putClearButton()}};SelectPage.prototype.eDropdownButton=function(){var self=this;$(self.elem.button).mouseup(function(ev){ev.stopPropagation();if($(self.elem.result_area).is(":hidden")&&!$(self.elem.combo_input).prop("disabled")){$(self.elem.combo_input).focus()}else self.hideResults(self)}).mouseout()};SelectPage.prototype.eInput=function(){var self=this;var showList=function(){self.prop.page_move=false;self.suggest(self);self.setCssFocusedInput(self)};$(self.elem.combo_input).keyup(function(e){self.processKey(self,e)}).keydown(function(e){self.processControl(self,e)}).focus(function(e){if($(self.elem.result_area).is(":hidden")){e.stopPropagation();self.prop.first_show=true;showList()}});$(self.elem.container).on("click.SelectPage","div."+self.css_class.clear_btn,function(e){e.stopPropagation();self.clearAll(self);$(self.elem.clear_btn).remove();if(self.option.eClear&&$.isFunction(self.option.eClear))self.option.eClear()});if(self.option.multiple){if(self.option.multipleControlbar){$(".sp_select_all",self.elem.control).on("click.SelectPage",function(e){self.selectAllLine(self)});$(".sp_unselect_all",self.elem.control).on("click.SelectPage",function(e){self.unselectAllLine(self)});$(".sp_clear_all",self.elem.control).on("click.SelectPage",function(e){self.clearAll(self)})}$(self.elem.element_box).on("click.SelectPage",function(e){var srcEl=e.target||e.srcElement;if($(srcEl).is("ul"))$(self.elem.combo_input).focus()});$(self.elem.element_box).on("click.SelectPage","span.tag_close",function(){var li=$(this).closest("li");self.removeTag(self,li);showList();if(self.option.eTagRemove&&$.isFunction(self.option.eTagRemove))self.option.eTagRemove(1)});self.inputResize(self)}};SelectPage.prototype.eWhole=function(){var self=this;$(document).off("mousedown.selectPage").on("mousedown.selectPage",function(e){var ele=e.target||e.srcElement;var sm=$(ele).closest("div."+self.css_class.container);var cleanContent=function(obj){$(obj.elem.combo_input).val("");if(!obj.option.multiple)$(obj.elem.hidden).val("");obj.prop.selected_text=""};$("div."+self.css_class.container+"."+self.css_class.container_open).each(function(){if(this==sm[0])return;var d=$("input."+self.css_class.input,this).data(SelectPage.dataKey);if(!$(d.elem.combo_input).val()&&$(d.elem.hidden).val()&&!d.option.multiple){d.prop.current_page=1;cleanContent(d);d.hideResults(d);return true}if($("li",$(d.elem.results)).size()>0){if(d.option.autoFillResult){if($("li.sp_selected",$(d.elem.results)).size()>0){d.hideResults(d)}else if($("li.sp_over",$(d.elem.results)).size()>0){if($(d.elem.hidden).val())d.hideResults(d);else d.selectCurrentLine(d,true)}else if(d.option.autoSelectFirst){if($(d.elem.hidden).val())d.hideResults(d);else{d.nextLine(d);d.selectCurrentLine(d,true)}}else d.hideResults(d)}else d.hideResults(d)}else{if(d.option.noResultClean)cleanContent(d);else{if(!d.option.multiple)$(d.elem.hidden).val("")}d.hideResults(d)}})})};SelectPage.prototype.eResultList=function(){var self=this;$(self.elem.results).children("li").mouseenter(function(){if(self.prop.key_select){self.prop.key_select=false;return}if(!$(this).hasClass(self.css_class.selected)&&!$(this).hasClass("sp_message_box")){$(this).addClass(self.css_class.select);self.setCssFocusedResults(self)}}).mouseleave(function(){$(this).removeClass(self.css_class.select)}).click(function(e){if(self.prop.key_select){self.prop.key_select=false;return}e.preventDefault();e.stopPropagation();if(!$(this).hasClass(self.css_class.selected))self.selectCurrentLine(self,false)})};SelectPage.prototype.ehNaviPaging=function(){var self=this;if(!self.option.pagination)return;$("li.csFirstPage",$(self.elem.navi)).off("click").on("click",function(ev){ev.preventDefault();self.firstPage(self)});$("li.csPreviousPage",$(self.elem.navi)).off("click").on("click",function(ev){ev.preventDefault();self.prevPage(self)});$("li.csNextPage",$(self.elem.navi)).off("click").on("click",function(ev){ev.preventDefault();self.nextPage(self)});$("li.csLastPage",$(self.elem.navi)).off("click").on("click",function(ev){ev.preventDefault();self.lastPage(self)})};SelectPage.prototype.ajaxErrorNotify=function(self,errorThrown){self.showMessage(self.message.ajax_error)};SelectPage.prototype.showMessage=function(self,msg){if(!msg)return;var msgLi='<li class="sp_message_box"><i class="fa fa-exclamation-triangle"></i> '+msg+"</li>";$(self.elem.results).empty().append(msgLi);self.calcResultsSize(self);$(self.elem.container).addClass(self.css_class.container_open);$(self.elem.control).hide();if(self.option.pagination)$(self.elem.navi).hide()};SelectPage.prototype.scrollWindow=function(self,enforce){var current_result=self.getCurrentLine(self);var target_top=current_result&&!enforce?current_result.offset().top:$(self.elem.container).offset().top;var target_size;self.prop.size_li=$(self.elem.results).children("li:first").outerHeight();target_size=self.prop.size_li;var client_height=$(window).height();var scroll_top=$(window).scrollTop();var scroll_bottom=scroll_top+client_height-target_size;var gap;if($(current_result).length){if(target_top<scroll_top||target_size>client_height){gap=target_top-scroll_top}else if(target_top>scroll_bottom){gap=target_top-scroll_bottom}else return}else if(target_top<scroll_top)gap=target_top-scroll_top;window.scrollBy(0,gap)};SelectPage.prototype.setCssFocusedInput=function(self){};SelectPage.prototype.setCssFocusedResults=function(self){};SelectPage.prototype.checkValue=function(self){var now_value=$(self.elem.combo_input).val();if(now_value!=self.prop.prev_value){self.prop.prev_value=now_value;self.prop.first_show=false;if(self.option.selectOnly)self.setButtonAttrDefault();if(!self.option.multiple&&!now_value){self.clearAll(self);$(self.elem.clear_btn).remove()}self.suggest(self)}};SelectPage.prototype.processKey=function(self,e){if($.inArray(e.keyCode,[37,38,39,40,27,9,13])===-1){if(e.keyCode!=16)self.setCssFocusedInput(self);self.inputResize(self);if($.type(self.option.data)==="string"){self.prop.last_input_time=e.timeStamp;setTimeout(function(){if(e.timeStamp-self.prop.last_input_time===0)self.checkValue(self)},self.option.inputDelay*1e3)}else{self.checkValue(self)}}};SelectPage.prototype.processControl=function(self,e){if($.inArray(e.keyCode,[37,38,39,40,27,9])>-1&&$(self.elem.result_area).is(":visible")||$.inArray(e.keyCode,[13,9])>-1&&self.getCurrentLine(self)){e.preventDefault();e.stopPropagation();e.cancelBubble=true;e.returnValue=false;switch(e.keyCode){case 37:if(e.shiftKey)self.firstPage(self);else self.prevPage(self);break;case 38:self.prop.key_select=true;self.prevLine(self);break;case 39:if(e.shiftKey)self.lastPage(self);else self.nextPage(self);break;case 40:if($(self.elem.results).children("li").length){self.prop.key_select=true;self.nextLine(self)}else self.suggest(self);break;case 9:self.prop.key_paging=true;self.selectCurrentLine(self,true);break;case 13:self.selectCurrentLine(self,true);break;case 27:self.prop.key_paging=true;self.hideResults(self);break}}};SelectPage.prototype.abortAjax=function(self){if(self.prop.xhr){self.prop.xhr.abort();self.prop.xhr=false}};SelectPage.prototype.suggest=function(self){var q_word;var val=$.trim($(self.elem.combo_input).val());if(self.option.multiple)q_word=val;else{if(val&&val===self.prop.selected_text)q_word="";else q_word=val}q_word=q_word.split(/[\s ]+/);self.abortAjax(self);self.setLoading(self);var which_page_num=self.prop.current_page>0?self.prop.current_page:1;if(typeof self.option.data=="object")self.searchForJson(self,q_word,which_page_num);else self.searchForDb(self,q_word,which_page_num)};SelectPage.prototype.setLoading=function(self){if($(self.elem.results).html()===""){$(self.elem.container).addClass(self.css_class.container_open)}};SelectPage.prototype.searchForDb=function(self,q_word,which_page_num){if(!self.option.eAjaxSuccess||!$.isFunction(self.option.eAjaxSuccess))self.hideResults(self);var _paramsFunc=self.option.params;var _params={};var searchKey=self.option.searchField;if(q_word.length>0&&q_word[0]&&q_word[0]!==self.prop.prev_value)which_page_num=1;var _orgParams={q_word:q_word,pageNumber:which_page_num,pageSize:self.option.pageSize,andOr:self.option.andOr,orderBy:self.option.orderBy,searchTable:self.option.dbTable,page:which_page_num,per_page:self.option.pageSize,and_or:self.option.andOr,order_by:self.option.orderBy,field:self.option.showField,pkey_name:self.option.keyField,search_field:searchKey};_orgParams[searchKey]=q_word[0];if(_paramsFunc){var result=$.isFunction(_paramsFunc)?_paramsFunc():_paramsFunc;if(result&&$.isPlainObject(result)){_params=$.extend({},_orgParams,result)}else{_params=_orgParams}}else{_params=_orgParams}self.prop.xhr=$.ajax({dataType:"json",url:self.option.data,type:"POST",data:_params,success:function(returnData){if(!returnData||!$.isPlainObject(returnData)){self.hideResults(self);self.ajaxErrorNotify(self);return}var data;if(self.option.eAjaxSuccess&&$.isFunction(self.option.eAjaxSuccess)){data=self.option.eAjaxSuccess(returnData)}else{data=returnData}var json={};json.originalResult=data.list;json.cnt_whole=typeof data.total!=="undefined"?data.total:typeof data.totalRow!=="undefined"?data.totalRow:data.list.length;json.candidate=[];json.keyField=[];if(typeof json.originalResult!="object"){self.prop.xhr=null;self.notFoundSearch(self);return}json.cnt_page=json.originalResult.length;for(var i=0;i<json.cnt_page;i++){for(var key in json.originalResult[i]){if(key==self.option.keyField){json.keyField.push(json.originalResult[i][key])}if(key==self.option.showField){json.candidate.push(json.originalResult[i][key])}}}self.prepareResults(self,json,q_word,which_page_num)},error:function(jqXHR,textStatus,errorThrown){if(textStatus!="abort"){self.hideResults(self);self.ajaxErrorNotify(self,errorThrown)}},complete:function(){self.prop.xhr=null}})};SelectPage.prototype.searchForJson=function(self,q_word,which_page_num){var matched=[];var esc_q=[];var sorted=[];var json={};var i=0;var arr_reg=[];do{esc_q[i]=q_word[i].replace(/\W/g,"\\$&").toString();arr_reg[i]=new RegExp(esc_q[i],"gi");i++}while(i<q_word.length);for(i=0;i<self.option.data.length;i++){var flag=false;var row=self.option.data[i];for(var j=0;j<arr_reg.length;j++){var itemText=row[self.option.showField];if(self.option.formatItem&&$.isFunction(self.option.formatItem))itemText=self.option.formatItem(row);if(itemText.match(arr_reg[j])){flag=true;if(self.option.andOr=="OR")break}else{flag=false;if(self.option.andOr=="AND")break}}if(flag)matched.push(row)}var reg1=new RegExp("^"+esc_q[0]+"$","gi");var reg2=new RegExp("^"+esc_q[0],"gi");var matched1=[];var matched2=[];var matched3=[];for(i=0;i<matched.length;i++){var orderField=self.option.orderBy[0][0];var orderValue=String(matched[i][orderField]);if(orderValue.match(reg1)){matched1.push(matched[i])}else if(orderValue.match(reg2)){matched2.push(matched[i])}else{matched3.push(matched[i])}}if(self.option.orderBy[0][1].match(/^asc$/i)){matched1=self.sortAsc(self,matched1);matched2=self.sortAsc(self,matched2);matched3=self.sortAsc(self,matched3)}else{matched1=self.sortDesc(self,matched1);matched2=self.sortDesc(self,matched2);matched3=self.sortDesc(self,matched3)}sorted=sorted.concat(matched1).concat(matched2).concat(matched3);json.cnt_whole=sorted.length;if(!self.prop.page_move){if(!self.option.multiple){var currentValue=$(self.elem.hidden).val();if($.type(currentValue)!=="undefined"&&$.trim(currentValue)!==""){var index=0;$.each(sorted,function(i,row){if(row[self.option.keyField]==currentValue){index=i+1;return false}});which_page_num=Math.ceil(index/self.option.pageSize);if(which_page_num<1)which_page_num=1;self.prop.current_page=which_page_num}}}else{if(sorted.length<=(which_page_num-1)*self.option.pageSize){which_page_num=1;self.prop.current_page=1}}var start=(which_page_num-1)*self.option.pageSize;var end=start+self.option.pageSize;json.originalResult=[];for(i=start;i<end;i++){if(sorted[i]===undefined)break;json.originalResult.push(sorted[i]);for(var key in sorted[i]){if(key==self.option.keyField){if(json.keyField===undefined)json.keyField=[];json.keyField.push(sorted[i][key])}if(key==self.option.showField){if(json.candidate===undefined)json.candidate=[];json.candidate.push(sorted[i][key])}}}if(json.candidate===undefined)json.candidate=[];json.cnt_page=json.candidate.length;self.prepareResults(self,json,q_word,which_page_num)};SelectPage.prototype.sortAsc=function(self,arr){arr.sort(function(a,b){var valA=a[self.option.orderBy[0][0]];var valB=b[self.option.orderBy[0][0]];return $.type(valA)==="number"?valA-valB:String(valA).localeCompare(String(valB))});return arr};SelectPage.prototype.sortDesc=function(self,arr){arr.sort(function(a,b){var valA=a[self.option.orderBy[0][0]];var valB=b[self.option.orderBy[0][0]];return $.type(valA)==="number"?valB-valA:String(valB).localeCompare(String(valA))});return arr};SelectPage.prototype.notFoundSearch=function(self){$(self.elem.results).empty();self.calcResultsSize(self);$(self.elem.container).addClass(self.css_class.container_open);self.setCssFocusedInput(self)};SelectPage.prototype.prepareResults=function(self,json,q_word,which_page_num){if(self.option.pagination)self.setNavi(self,json.cnt_whole,json.cnt_page,which_page_num);if(!json.keyField)json.keyField=false;if(self.option.selectOnly&&json.candidate.length===1&&json.candidate[0]==q_word[0]){$(self.elem.hidden).val(json.keyField[0]);this.setButtonAttrDefault()}var is_query=false;if(q_word&&q_word.length>0&&q_word[0])is_query=true;self.displayResults(self,json,is_query)};SelectPage.prototype.setNavi=function(self,cnt_whole,cnt_page,page_num){var buildPageNav=function(self,pagebar,page_num,last_page){if($("li",$(pagebar)).size()==0){$(pagebar).empty();var btnclass="",isNewFontAwesome=true;$.each(document.styleSheets,function(i,n){if(n&&n.href&&n.href.indexOf("font-awesome-3.2.1")!=-1){isNewFontAwesome=false;return false}});var iconFist="fa fa-angle-double-left",iconPrev="fa fa-angle-left",iconNext="fa fa-angle-right",iconLast="fa fa-angle-double-right";if(!isNewFontAwesome){iconFist="icon-step-backward";iconPrev="icon-backward";iconNext="icon-forward";iconLast="icon-step-forward"}if(page_num==1)btnclass=" disabled ";$(pagebar).append('<li class="csFirstPage'+btnclass+'" title="'+self.message.first_title+'" ><a href="javascript:void(0);"> <i class="'+iconFist+'"></i> </a></li>');$(pagebar).append('<li class="csPreviousPage'+btnclass+'" title="'+self.message.prev_title+'" ><a href="javascript:void(0);"><i class="'+iconPrev+'"></i></a></li>');var pageInfo="第 "+page_num+" 页(共"+last_page+"页)";$(pagebar).append('<li class="pageInfoBox"><a href="javascript:void(0);"> '+pageInfo+" </a></li>");if(page_num==last_page)btnclass=" disabled ";else btnclass="";$(pagebar).append('<li class="csNextPage'+btnclass+'" title="'+self.message.next_title+'" ><a href="javascript:void(0);"><i class="'+iconNext+'"></i></a></li>');$(pagebar).append('<li class="csLastPage'+btnclass+'" title="'+self.message.last_title+'" ><a href="javascript:void(0);"> <i class="'+iconLast+'"></i> </a></li>')}};var pagebar=$(self.elem.navi);var last_page=Math.ceil(cnt_whole/self.option.pageSize);if(last_page==0)page_num=0;else{if(last_page<page_num)page_num=last_page;else if(page_num==0)page_num=1}self.prop.current_page=page_num;self.prop.max_page=last_page;buildPageNav(self,pagebar,page_num,last_page);var pageInfoBox=$("li.pageInfoBox",$(pagebar));var pageInfo="第 "+page_num+" 页(共"+last_page+"页)";$(pageInfoBox).html('<a href="javascript:void(0);"> '+pageInfo+" </a>");var dClass="disabled";var first=$("li.csFirstPage",$(pagebar));var previous=$("li.csPreviousPage",$(pagebar));var next=$("li.csNextPage",$(pagebar));var last=$("li.csLastPage",$(pagebar));if(page_num===1||page_num===0){if(!$(first).hasClass(dClass))$(first).addClass(dClass);if(!$(previous).hasClass(dClass))$(previous).addClass(dClass)}else{if($(first).hasClass(dClass))$(first).removeClass(dClass);if($(previous).hasClass(dClass))$(previous).removeClass(dClass)}if(page_num==last_page||last_page==0){if(!$(next).hasClass(dClass))$(next).addClass(dClass);if(!$(last).hasClass(dClass))$(last).addClass(dClass)}else{if($(next).hasClass(dClass))$(next).removeClass(dClass);if($(last).hasClass(dClass))$(last).removeClass(dClass)}if(last_page>1)self.ehNaviPaging()};SelectPage.prototype.displayResults=function(self,json,is_query){$(self.elem.results).empty();if(self.option.multiple&&$.type(self.option.maxSelectLimit)==="number"&&self.option.maxSelectLimit>0){var selectedSize=$("li.selected_tag",self.elem.element_box).size();if(selectedSize>0&&selectedSize>=self.option.maxSelectLimit){self.showMessage(self,"最多只能选择 "+self.option.maxSelectLimit+" 个项目");return}}if(json.candidate.length>0){var arr_candidate=json.candidate;var arr_primary_key=json.keyField;var keystr=$(self.elem.hidden).val();var keyArr=keystr?keystr.split(","):new Array;for(var i=0;i<arr_candidate.length;i++){var itemText="";if(self.option.formatItem&&$.isFunction(self.option.formatItem)){try{itemText=self.option.formatItem(json.originalResult[i])}catch(e){console.error("formatItem内容格式化函数内容设置不正确!");itemText=arr_candidate[i]}}else itemText=arr_candidate[i];var list=$("<li>").html(itemText).attr({pkey:arr_primary_key[i],title:itemText});if($.inArray(arr_primary_key[i].toString(),keyArr)!==-1){$(list).addClass(self.css_class.selected)}$(list).data("dataObj",json.originalResult[i]);$(self.elem.results).append(list)}}else{var li='<li class="sp_message_box"><i class="fa fa-exclamation-triangle"></i> '+self.message.not_found+"</li>";$(self.elem.results).append(li)}if(self.option.multiple&&self.option.multipleControlbar)$(self.elem.control).show();if(self.option.pagination)$(self.elem.navi).toggleClass("hide",json.cnt_whole<=json.cnt_page);self.calcResultsSize(self);$(self.elem.container).addClass(self.css_class.container_open);self.eResultList();if(is_query&&json.candidate.length>0&&self.option.autoSelectFirst)self.nextLine(self)};SelectPage.prototype.calcResultsSize=function(self){var rePosition=function(){if($(self.elem.container).css("position")==="static"){var offset=$(self.elem.combo_input).offset();$(self.elem.result_area).css({top:offset.top+$(self.elem.combo_input).outerHeight()+"px",left:offset.left+"px"})}else{if(!self.option.pagination){var itemHeight=$("li:first",self.elem.results).outerHeight(true);var listHeight=itemHeight*self.option.listSize;$(self.elem.results).css({"max-height":listHeight,"overflow-y":"auto"})}var docWidth=$(document).width();var docHeight=$(document).height();var viewHeight=$(window).height();var offset=$(self.elem.container).offset();var screenScrollTop=$(window).scrollTop();var listWidth=$(self.elem.result_area).outerWidth();var listHeight=$(self.elem.result_area).outerHeight();var defaultLeft=self.option.multiple?-1:0;var inputHeight=$(self.elem.container).outerHeight();var left=offset.left+listWidth>docWidth?-(listWidth-$(self.elem.container).outerWidth()):defaultLeft;var screenTop=offset.top;var top=0,dist=5;var listBottom=screenTop+inputHeight+listHeight+dist;var hasOverflow=docHeight>viewHeight;if(screenTop-screenScrollTop-dist>listHeight&&(hasOverflow&&listBottom>viewHeight+screenScrollTop)||!hasOverflow&&listBottom>viewHeight){top=-(listHeight+1)-dist;$(self.elem.result_area).removeClass("shadowUp shadowDown").addClass("shadowUp")}else{top=self.option.multiple?$(self.elem.container).innerHeight()+1:$(self.elem.container).outerHeight();$(self.elem.result_area).removeClass("shadowUp shadowDown").addClass("shadowDown");top+=dist}return{top:top+"px",left:left+"px"}}};if($(self.elem.result_area).is(":visible")){$(self.elem.result_area).css(rePosition())}else{$(self.elem.result_area).show(1,function(){$(this).css(rePosition())})}};SelectPage.prototype.hideResults=function(self){if(self.prop.key_paging){self.scrollWindow(self,true);self.prop.key_paging=false}self.setCssFocusedInput(self);if(self.option.autoFillResult){}$(self.elem.results).empty();$(self.elem.result_area).hide();$(self.elem.container).removeClass(self.css_class.container_open);self.abortAjax(self);self.setButtonAttrDefault()};SelectPage.prototype.firstPage=function(self){if(self.prop.current_page>1){self.prop.current_page=1;self.prop.page_move=true;self.suggest(self)}};SelectPage.prototype.prevPage=function(self){if(self.prop.current_page>1){self.prop.current_page--;self.prop.page_move=true;self.suggest(self)}};SelectPage.prototype.nextPage=function(self){if(self.prop.current_page<self.prop.max_page){self.prop.current_page++;self.prop.page_move=true;self.suggest(self)}};SelectPage.prototype.lastPage=function(self){if(self.prop.current_page<self.prop.max_page){self.prop.current_page=self.prop.max_page;self.prop.page_move=true;self.suggest(self)}};SelectPage.prototype.goPage=function(self,page){if(typeof page==="undefined")page=1;if(self.prop.current_page<self.prop.max_page){self.prop.current_page=page;self.prop.page_move=true;self.suggest(self)}};SelectPage.prototype.afterAction=function(self){self.inputResize(self);$(self.elem.combo_input).trigger("change");$(self.elem.hidden).trigger("change");self.setCssFocusedInput(self);if(self.option.multiple){if(self.option.selectToCloseList){self.hideResults(self);$(self.elem.combo_input).blur()}else{self.suggest(self);$(self.elem.combo_input).focus()}}else{self.hideResults(self);$(self.elem.combo_input).blur()}};SelectPage.prototype.selectCurrentLine=function(self,is_enter_key){self.scrollWindow(self,true);var current=self.getCurrentLine(self);if(current){if(!self.option.multiple){$(self.elem.combo_input).val($(current).text());$(self.elem.hidden).val($(current).attr("pkey"))}else{$(self.elem.combo_input).val("");var item={text:$(current).text(),value:$(current).attr("pkey")};if(!self.isAlreadySelected(self,item)){self.addNewTag(self,item);self.tagValuesSet(self)}}if(self.option.selectOnly)self.setButtonAttrDefault();if(self.option.eSelect&&$.isFunction(self.option.eSelect))self.option.eSelect($(current).data("dataObj"));self.prop.prev_value=$(self.elem.combo_input).val();self.prop.selected_text=$(self.elem.combo_input).val();self.putClearButton()}self.afterAction(self)};SelectPage.prototype.putClearButton=function(){if(!this.option.multiple&&!$(this.elem.combo_input).prop("disabled"))$(this.elem.container).append(this.elem.clear_btn)};SelectPage.prototype.selectAllLine=function(self){var jsonarr=new Array;$("li",self.elem.results).each(function(i,row){var item={text:$(row).text(),value:$(row).attr("pkey")};if(!self.isAlreadySelected(self,item)){self.addNewTag(self,item);self.tagValuesSet(self)}jsonarr.push($(row).data("dataObj"));if($.type(self.option.maxSelectLimit)==="number"&&self.option.maxSelectLimit>0&&self.option.maxSelectLimit===$("li.selected_tag",self.elem.element_box).size()){return false}});if(self.option.eSelect&&$.isFunction(self.option.eSelect))self.option.eSelect(jsonarr);self.afterAction(self)};SelectPage.prototype.unselectAllLine=function(self){var size=$("li",self.elem.results).size();$("li",self.elem.results).each(function(i,row){var key=$(row).attr("pkey");var tag=$('li.selected_tag[itemvalue="'+key+'"]',self.elem.element_box);self.removeTag(self,tag)});self.afterAction(self);if(self.option.eTagRemove&&$.isFunction(self.option.eTagRemove))self.option.eTagRemove(size)};SelectPage.prototype.clearAll=function(self){var size=0;if(self.option.multiple){size=$("li.selected_tag",self.elem.element_box).size();$("li.selected_tag",self.elem.element_box).remove()}$(self.elem.combo_input).val("");$(self.elem.hidden).val("");self.afterAction(self);if(self.option.multiple){if(self.option.eTagRemove&&$.isFunction(self.option.eTagRemove))self.option.eTagRemove(size)}};SelectPage.prototype.getCurrentLine=function(self){if($(self.elem.result_area).is(":hidden"))return false;var obj=$("li."+self.css_class.select,self.elem.results);if($(obj).size())return obj;else return false};SelectPage.prototype.isAlreadySelected=function(self,item){var isExist=false;if(item.value){var keys=$(self.elem.hidden).val();if(keys){var karr=keys.split(",");if(karr&&karr.length>0&&$.inArray(item.value,karr)!=-1)isExist=true}}return isExist};SelectPage.prototype.addNewTag=function(self,item){if(!self.option.multiple||!item)return;var tmp=self.template.tag.content,tag;tmp=tmp.replace(self.template.tag.textKey,item.text);tmp=tmp.replace(self.template.tag.valueKey,item.value);tag=$(tmp);if($(self.elem.combo_input).prop("disabled"))$("span.tag_close",tag).hide();$(self.elem.combo_input).closest("li").before(tag)};SelectPage.prototype.removeTag=function(self,item){var key=$(item).attr("itemvalue");var keys=$(self.elem.hidden).val();if($.type(key)!="undefined"&&keys){var keyarr=keys.split(",");var index=$.inArray(key.toString(),keyarr);if(index!=-1){keyarr.splice(index,1);$(self.elem.hidden).val(keyarr.toString())}}$(item).remove();self.inputResize(self)};SelectPage.prototype.tagValuesSet=function(self){if(!self.option.multiple)return;var tags=$("li.selected_tag",$(self.elem.element_box));if(tags&&$(tags).size()>0){var result=new Array;$.each(tags,function(i,li){var v=$(li).attr("itemvalue");if($.type(v)!=="undefined")result.push(v)});if(result.length>0){$(self.elem.hidden).val(result.join(","))}}};SelectPage.prototype.inputResize=function(self){if(!self.option.multiple)return;var width="";var inputLi=self.elem.combo_input.closest("li");var setDefaultSize=function(self,inputLi){inputLi.removeClass("full_width");var minimumWidth=self.elem.combo_input.val().length+1;var width=minimumWidth*.75+"em";self.elem.combo_input.css("width",width);self.elem.combo_input.removeAttr("placeholder")};if($("li.selected_tag",$(self.elem.element_box)).size()===0){if(self.elem.combo_input.attr("placeholder_bak")){if(!inputLi.hasClass("full_width"))inputLi.addClass("full_width");self.elem.combo_input.attr("placeholder",self.elem.combo_input.attr("placeholder_bak"));self.elem.combo_input.removeAttr("style")}else setDefaultSize(self,inputLi)}else setDefaultSize(self,inputLi)};SelectPage.prototype.nextLine=function(self){var obj=self.getCurrentLine(self);var idx;if(!obj)idx=-1;else{idx=$(self.elem.results).children("li").index(obj);$(obj).removeClass(self.css_class.select)}idx++;if(idx<$(self.elem.results).children("li").length){var next=$(self.elem.results).children("li").eq(idx);$(next).addClass(self.css_class.select);self.setCssFocusedResults(self)}else self.setCssFocusedInput(self);self.scrollWindow(self,false)};SelectPage.prototype.prevLine=function(self){var obj=self.getCurrentLine(self);var idx;if(!obj)idx=$(self.elem.results).children("li").length;else{idx=$(self.elem.results).children("li").index(obj);$(obj).removeClass(self.css_class.select)}idx--;if(idx>-1){var prev=$(self.elem.results).children("li").eq(idx);$(prev).addClass(self.css_class.select);self.setCssFocusedResults(self)}else self.setCssFocusedInput(self);self.scrollWindow(self,false)};function Plugin(option){return this.each(function(){var $this=$(this),data=$this.data(SelectPage.dataKey),params=$.extend({},defaults,$this.data(),data&&data.option,typeof option==="object"&&option);if(!data)$this.data(SelectPage.dataKey,data=new SelectPage(this,params))})}function getPlugin(obj){var container=$(obj).closest("div.sp_container");return $("input.sp_input",container)}function ClearSelected(){return this.each(function(){var $this=getPlugin(this),data=$this.data(SelectPage.dataKey);if(data)data.clearAll(data)})}function SelectedRefresh(){return this.each(function(){var $this=getPlugin(this),data=$this.data(SelectPage.dataKey);if(data&&data.elem.hidden.val())data.setInitRecord(true)})}function ModifyDataSource(data){return this.each(function(){if(data&&$.isArray(data)&&data.length>0){var $this=getPlugin(this),plugin=$this.data(SelectPage.dataKey);if(plugin){plugin.clearAll(plugin);plugin.option.data=data}}})}function GetInputText(){var str="";this.each(function(){var $this=getPlugin(this),data=$this.data(SelectPage.dataKey);if(data)str+=data.elem.combo_input.val()});return str}function GetInputValue(){var str="";this.each(function(){var $this=getPlugin(this),data=$this.data(SelectPage.dataKey);if(data)str+=data.elem.hidden.val()});return str}var old=$.fn.selectPage;$.fn.selectPage=Plugin;$.fn.selectPage.Constructor=SelectPage;$.fn.selectPageClear=ClearSelected;$.fn.selectPageRefresh=SelectedRefresh;$.fn.selectPageData=ModifyDataSource;$.fn.selectPageText=GetInputText;$.fn.selectPageValue=GetInputValue;$.fn.selectPage.noConflict=function(){$.fn.selectPage=old;return this}});
|