PageSourceSearch

https://m-sol.kr/jquery/jquery.selectbox.js?1789361064

js m-sol.kr collected 2026-10-02 00:21:53 UTC 17,233 bytes, 585 lines download raw bytes

1/*
2 * jQuery selectbox
3 *
4 * Copyright 2011 cocoa-studio (http://www.cocoa-studio.com)
5 *
6*/
7(function($) {
8	$.fn.selectbox = function(o,v) {
9		var obj = $(this);
10		var item = obj.data('item');
11		var default_key='';
12		var max_height=200;
13		var event_closed=false;
14		var width = 'auto';
15		var option_css = '';
16		var click_show = false;
17		var select_current = {};
18		var select_option = {};
19		var select_container = {};
20		var select_option_wrap = {};
21		var select_container_h = 0;
22		var item_width = false; //설렉트 옵션 레이어 넓이 커스텀
23		var fixed_name = false; //current 설렉트 텍스트 고정
24		var multi_select = false;
25		var multi_all_value = '전체 아이템';
26		var multi_no_value = '';
27		var muti_prefix = '개 아이템';
28		var all_sel_value = false;
29		var all_sel_item_name = "전체선택";
30		var is_change = false;
31		var use_multi_all_value = true;
32		var max_select_count = 0;
33
34		/*
35		$select_current = $obj.data('select_current');
36		$select_option = $obj.data('select_option');
37		$select_container = $obj.data('select_container');
38		*/
39
40		//alert($(this).eq(0).className);
41
42		//set select
43
44		function select_item(key){
45			var i=0;
46			key = return_exist_keys(key);
47			if(obj.data('multi_select')){
48				if(key.length>0){
49					if(key.length==1){
50						for(i=0; i<item.length; i++){
51							if(item[i].key==key[0]){
52								obj.find('div.select_current div.select_current_txt').html(item[i].title!=undefined ? item[i].title : item[i].value);
53								obj.data('current_value', item[i].value);
54								obj.data('current_key', key);
55								obj.data('current_tag', item[i].tag);
56								break;
57							}
58						}
59					}else{
60						var multi_txt = key.length+obj.data('muti_prefix');
61						if(obj.data('all_sel_value')){ //전체선택 기능 사용시 all을 제거한 나머지 코드값 갯수가 item갯수랑 동일하면 전체선택으로 체크 - lsy
62							if(key.length == item.length-1){
63								if(use_multi_all_value){
64									multi_txt = obj.data('multi_all_value');
65								}
66							}else if(key.length==0)
67								multi_txt = obj.data('multi_no_value');
68						}else{
69							if(key.length == item.length){
70								if(use_multi_all_value){
71									multi_txt = obj.data('multi_all_value');
72								}
73							}else if(key.length==0)
74								multi_txt = obj.data('multi_no_value');
75						}
76
77							//obj.find('div.select_current div.select_current_txt').html(multi_txt);
78							//key = '';
79						//}else{
80							obj.find('div.select_current div.select_current_txt').html(multi_txt);
81							obj.data('current_value', key);
82							obj.data('current_key', key);
83							obj.data('current_tag', item[i].tag);
84						//}
85					}
86				}
87				if(key==''){
88					var txt = obj.data('multi_no_value') !='' ? obj.data('multi_no_value') : obj.data('multi_all_value');
89					obj.find('div.select_current div.select_current_txt').html(txt);
90					obj.data('current_value', txt);
91					obj.data('current_key', []);
92					obj.data('current_tag', '');
93				}
94			}else{
95				for(i=0; i<item.length; i++){
96					if(key == '' && obj.data('fixed_name')){
97						obj.find('div.select_current div.select_current_txt').html(obj.data('fixed_name'));
98						break;
99					}else{
100						if(item[i].key==key){
101							if (obj.data('fixed_name'))
102								obj.find('div.select_current div.select_current_txt').html(obj.data('fixed_name'));
103							else
104								obj.find('div.select_current div.select_current_txt').html(item[i].title!=undefined ? item[i].title : item[i].value);
105							if(click_show){
106								$(".select_current_txt").css('width','auto');
107							}
108							obj.data('current_value', item[i].value);
109							obj.data('current_key', key);
110							obj.data('current_tag', item[i].tag);
111							break;
112						}
113					}
114				}
115			}
116		}
117
118		//set disabled
119		function set_disabled(v){
120			obj.data('is_disabled', v);
121		}
122
123		//set background color
124		function set_bgcolor(v){
125			obj.find('div.select_current').css('background-color', v);
126			obj.find('div.select_option, div.select_container').css('background-color', v);
127		}
128
129		//make_selectbox
130		function make_selectbox(){
131			var html = '';
132			html += "<div class='select_current'><div class='select_current_txt'></div></div>";
133			return html;
134		}
135
136		//make_selectbox_option
137		function make_selectbox_option(){
138			var html = '';
139			html += "<div class='select_option' style='visibility:hidden'>";
140			if(obj.data('multi_select'))
141				html += "<div class='select_container multi'>";
142			else
143				html += "<div class='select_container'>";
144
145			//전체선택 옵션 사용시 item 가장앞에 전체선택 아이템 추가 - lsy
146			if(obj.data('all_sel_value')){
147				var _all_sel_item = {"key":"all","value":all_sel_item_name};
148				item.unshift(_all_sel_item);
149			}
150
151
152			var i=0;
153			for(i=0; i<item.length; i++){
154				//html += "<div class='select_item current'>"+ RemoveTag(o.item[i].value)+"</div>";
155				html += "<div class='select_item _key_"+item[i].key+"'>"+ item[i].value+"</div>";
156			}
157			html += "</div>";
158			html += "</div>";
159			return html;
160		}
161
162		//set max_height
163		function set_maxheight(){
164			if(o.max_height) max_height = o.max_height;
165			/*
166			else if(o.max_cnt){
167				var item_list = select_container.find('div.select_item');
168				var max_cnt = 0;
169				max_cnt = o.max_cnt;
170				if(max_cnt>item_list.length) max_cnt = item_list.length;
171				h=0;
172				for(i=0; i<max_cnt; i++){
173					h += item_list.eq(i).height();
174				}
175			}
176			*/
177			select_container.css('max-height', max_height);
178			select_container.css('overflow', 'auto');
179		}
180
181		//show_selectbox
182		function show_selectbox(){
183			if(obj.data('all_sel_value')){//전체선택 기능 사용시 - lsy
184				var all_item_check = false;//전체선택시 체크하기 위한 변수 - lsy
185			}
186			if(obj.data('is_disabled')) return;
187			if(click_show){
188				select_option.css({
189					'margin-left' : '5px'
190				});
191			}
192			//container_item_offset_top
193			select_option.css({
194				'visibility' : 'hidden',
195				'display' : 'block'
196			});
197			select_container.find('div.select_item').each(function(){
198				select_container_h += $(this).outerHeight();
199			});
200			var select_docu_h = $(window).height();
201			var select_sc_t = $(window).scrollTop();
202			var select_offset_t = obj.offset().top-select_sc_t;
203			if(o.max_height) max_height = o.max_height;
204			//select_current.text(select_container_h + "//"+max_height);
205			if(select_container_h < max_height){
206				select_container_h = select_container_h;
207			}else{
208				select_container_h = max_height;
209			}
210			var obj_h = Math.round(select_offset_t+select_current.outerHeight()+select_container_h);
211			//select_current.text(select_docu_h + "//"+select_sc_t);
212			if(select_docu_h < obj_h){
213				if(obj.offset().top >350){
214					select_option.css('top',select_container_h*(-1));
215				}else{
216					select_option.css('top',select_current.outerHeight());
217				}
218			}else{
219				select_option.css('top',select_current.outerHeight());
220			}
221			select_container_h = 0;
222
223
224			select_option.css({
225				'visibility' : 'visible'
226			});
227			select_option_wrap.css({
228				'position' : 'absolute',
229				'z-index' : 10000,
230				'top' : obj.offset().top,
231				'left' : obj.offset().left
232			})
233			select_option.show();
234
235			var sel_pos=-1;
236			if(obj.data('multi_select')){
237				select_container.find('div.select_item').removeClass('current');
238				if(obj.data('current_key').length ==0){
239					//select_container.find('div.select_item').addClass('current');
240					//sel_pos=0;
241				}else{
242					if(obj.data('all_sel_value')) {//전체선택 기능 사용시 - lsy
243						if (item.length - 1 == obj.data('current_key').length) { // 전체선택 한 경우 - lsy
244							all_item_check = true;
245						}
246					}
247						$.each(obj.data('current_key'),function(index, current_keys){
248								select_container.find('div._key_'+current_keys).addClass('current');
249						});
250					if(all_item_check === true) { //전체선택 인경우 체크박스 활성화 비활성화 작업추가 - lsy
251						select_container.find('div._key_all').addClass('current');
252						sel_pos=obj.data('current_key').length-1;
253					}
254
255				}
256			}else{
257				select_container.find('div.select_item').each(function(no){
258					if(item[no].key==obj.data('current_key') && !obj.data('fixed_name')){
259
260						$(this).addClass('current');
261						sel_pos=no;
262					}else
263						$(this).removeClass('current');
264				});
265			}
266
267
268			if(sel_pos>=0)
269				select_container.scrollTop(sel_pos*select_container.find('div.select_item').eq(0).height());
270
271			$(document).bind('mousedown.selectbox', function(){
272				hide_selectbox();
273			});
274			select_option.bind('mousedown.selectbox', function(e){
275				e.stopPropagation();
276			});
277		}
278		click_show = o.click_show==undefined?click_show:o.click_show;
279		//hide_selectbox
280		function hide_selectbox(){
281			select_option_wrap = $('body').find('#'+obj.attr('id')+"_option");
282			select_option = select_option_wrap.find('div.select_option');
283			$(document).unbind('mousedown.selectbox');
284			select_option.unbind('mousedown.selectbox');
285			if(click_show){
286
287				select_option.hide();
288			}else{
289				select_option.hide();
290			}
291			if(event_closed){
292				o.closed(obj.data('current_key'));
293			}
294			
295			if(!!obj.data('close') && is_change){
296				obj.data('close')(obj.data('current_key'));
297				is_change = false;
298			}
299		}
300		
301		function return_exist_keys(keys){
302			if(!(!!keys)) return keys;
303			
304			var item_length = item.length;
305			
306			if(typeof keys == 'object'){
307				var exist_keys = [];
308				var key_length = keys.length;
309				for(var i=0; i<key_length; i++){
310					for(var j=0; j<item_length; j++){
311						if(keys[i] == item[j].key){
312							exist_keys.push(keys[i]);
313						}
314					}
315				}
316				return exist_keys;
317			} else {
318				var item_length = item.length;
319				for(var i=0; i<item_length; i++){
320					if(keys == item[i].key){
321						return keys;
322					}
323				}
324				return '';
325			}
326		}
327
328		switch(o){
329			case 'get_key':
330				return obj.data('current_key');
331				break;
332			case 'get_value':
333				return obj.data('current_value');
334				break;
335			case 'get_tag':
336				return obj.data('current_tag');
337				break;
338			case 'set_key':
339				select_item(v);
340				break;
341			case 'set_bgcolor':
342				set_bgcolor(v);
343				break;
344			case 'select_item':
345				select_item(v);
346				obj.data('change')(v);
347				break;
348			case 'set_disabled':
349				set_disabled(v);
350				break;
351			case 'hide':
352				hide_selectbox();
353				break;
354			case 'show':
355				obj.find('div.select_current').click();
356				$(this).show();
357				break;
358			case 'remove':
359				$('#'+$(this).attr('id')+"_option").remove();
360				$(this).empty();
361				break;
362			case 'destroy':
363				$('#'+$(this).attr('id')+"_option").remove();
364				$(this).empty();
365				obj.removeData();
366				break;
367			case 'is_select_all':
368				var current_select_keys = obj.data('current_key');
369				if(obj.data('all_sel_value')){ //전체선택 기능 사용시 all을 제거한 나머지 코드값 갯수가 item갯수랑 동일하면 전체선택으로 체크 - lsy
370					if(current_select_keys.length == item.length-1){
371						return true;
372					}
373				}else{
374					if(current_select_keys.length == item.length){
375						return true;
376					}
377				}
378				
379				return false;
380			case 'is_not_select':
381				var current_select_keys = obj.data('current_key');
382				if(obj.data('all_sel_value')){ //전체선택 기능 사용시 all을 제거한 나머지 코드값 갯수가 item갯수랑 동일하면 전체선택으로 체크 - lsy
383					if(current_select_keys.length == 0){
384						return true;
385					}
386				}
387				return false;
388				break;
389			default:
390				// change 이벤트
391				if(!!o.change) obj.data('change', o.change);
392				else { o.change = function(key){};	}
393				// close 이벤트
394				if(!!o.close) obj.data('close', o.close);
395				
396				if(o.all_sel_value === true){ // 전체선택 기능 사용시 - lsy
397					item = o.item.concat();
398				}else{
399					item = o.item;
400				}
401				obj.data('item', item);
402				if(o.fixed_name)
403					obj.data('fixed_name', o.fixed_name);//fixed_name = o.fixed_name;
404				else
405					obj.data('fixed_name', fixed_name);
406				if(o.multi_select)
407					obj.data('multi_select', o.multi_select);//fixed_name = o.fixed_name;
408				else
409					obj.data('multi_select', multi_select);
410				if(o.muti_prefix)
411					obj.data('muti_prefix', o.muti_prefix);//fixed_name = o.fixed_name;
412				else
413					obj.data('muti_prefix', muti_prefix);
414				if(o.multi_all_value)
415					obj.data('multi_all_value', o.multi_all_value);//fixed_name = o.fixed_name;
416				else
417					obj.data('multi_all_value', multi_all_value);
418				if(o.multi_no_value)
419					obj.data('multi_no_value', o.multi_no_value);//fixed_name = o.fixed_name;
420				else
421					obj.data('multi_no_value', multi_no_value);
422
423				if(o.all_sel_value) // 전체선택 기능 사용 유무 - lsy
424					obj.data('all_sel_value', o.all_sel_value);//fixed_name = o.fixed_name;
425				else
426					obj.data('all_sel_value', all_sel_value);
427
428				if(o.all_sel_item_name) // 전체선택 시 문구 - lsy
429					obj.data('all_sel_item_name', o.all_sel_item_name);//fixed_name = o.fixed_name;
430				else
431					obj.data('all_sel_item_name', all_sel_item_name);
432
433				use_multi_all_value = (o.use_multi_all_value===false ? false : true);
434				max_select_count = (!!o.max_select_count ? o.max_select_count : 0);
435
436				if(o.default_key!='') default_key = o.default_key;
437
438
439
440				if(typeof o.width=="string"){
441					if(o.width.indexOf("%")) width = o.width;
442				}else if(o.width>0){
443					width = o.width;
444				}
445
446				//넓이 % 설정을위해 주석 처리 위 내용으로 대체
447				//if(o.width>0) width = o.width;
448
449
450				if(o.option_css!='') option_css = o.option_css;
451				if(o.disabled) set_disabled(true);
452
453				if(typeof o.width=="string"){
454					if(o.width.indexOf("%")) item_width = o.item_width;
455				}else if(o.item_width=='auto'){
456					item_width = 'auto';
457				}else if(o.item_width>0){
458					item_width = o.item_width;
459				}
460				//넓이 % 설정을위해 주석 처리 위 내용으로 대체
461				//if(o.item_width>0) item_width = o.item_width;
462
463				if(o.event_closed==true){
464					event_closed = true;
465				}
466
467				//draw selectbox
468				if($(this).attr('id')==undefined){
469					$(this).attr('id',make_uniqid(8));
470				}
471				
472				select_option_wrap = $('#'+$(this).attr('id')+"_option");
473				if(select_option_wrap.length <= 0){
474					cocoa_select_box_op='<div class="select_type_option '+option_css+'" id="'+$(this).attr('id')+"_option" +'"></div>';
475					$('body').append(cocoa_select_box_op);
476					select_option_wrap = $('#'+$(this).attr('id')+"_option");
477				}
478
479				
480				$(this).empty();
481				$(this).html(make_selectbox());
482				select_option_wrap.html(make_selectbox_option());
483				$(this).width(width);
484
485				//make event handler
486				select_current = $(this).find('div.select_current');
487				select_option = select_option_wrap.find('div.select_option');
488				select_container = select_option_wrap.find('div.select_container');
489				/*
490				$obj.data('select_current', $select_current);
491				$obj.data('select_option', $select_option);
492				$obj.data('select_container', $select_container);
493				*/
494
495
496				if(typeof o.width=="string"){
497					if(o.width.indexOf("%")) select_option.width($(this).outerWidth()-2);
498				}else if(item_width=='auto'){
499					select_option.width('auto');
500				}else if(item_width>0){
501					select_option.width(item_width);
502				}else{
503					select_option.width(width-2);
504				}
505
506				//넓이 % 설정을위해 주석 처리 위 내용으로 대체
507/*				if(item_width>0) select_option.width(item_width);
508				else select_option.width(width-2);*/
509
510				select_current.click(function(){
511					if(click_show){
512
513						show_selectbox();
514					}else{
515						show_selectbox();
516					}
517				});
518				select_container.find('div.select_item').each(function(no){
519					$(this).click(function(){
520						if(obj.data('multi_select')){
521							var key_array = [];
522							key_array = obj.data('current_key');
523							var key_len = key_array.length;
524							for(var i=0; i < key_len; i++){
525								if(item[no].key == 'all'){//전체 선택이 된 상태에서 한번 더 체크시 전체선택 해제 - lsy
526									key_array.splice(i,key_len);
527									break;
528								}
529								if(key_array[i] == item[no].key){
530									key_array.splice(i,1);
531									break;
532								}
533							}
534
535							if(item[no].key=="all"){//전체 선택시 - lsy
536								if(i == key_len){
537									for(var i=0 ; i < item.length ; i++){
538										if(item[i].key != "all"){
539											key_array.push(item[i].key);
540										}
541									}
542								}
543							}else{
544								if(i == key_len) key_array.push(item[no].key);
545							}
546							
547							if(!all_sel_value && max_select_count > 0){
548								if(key_array.length > max_select_count){
549									alert(GetLangMsg('ADMIN_CONFIG_SNS_MAX_STRING', [max_select_count]));
550									return false;
551								}
552							}
553							select_item(key_array);
554							show_selectbox();
555							is_change = true;
556							o.change(key_array);	//raise event
557						}else{
558							select_item(item[no].key);
559							hide_selectbox();
560							is_change = true;
561							o.change(item[no].key);	//raise event
562						}
563					});
564				});
565
566				//init selectbox
567				set_maxheight();
568
569				if(obj.data('multi_select')){
570					select_item(default_key);
571				}else{
572					if(obj.data('fixed_name'))
573						select_item(default_key);
574					else
575						select_item(default_key!='' ? default_key : item[0].key);
576				}
577				select_option.css({
578					'visibility' : 'visible',
579					'display' : 'none'
580				});
581
582				if(o.bgcolor!='') set_bgcolor(o.bgcolor);
583		}
584	};
585})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.