검색결과 창 고정 ~
Copy
document.write("<span id='span_output' class='span_result_box'></span>"); document.write("<style type='text/css'>");document.write("span{font-size:9pt;}");document.write("span.span_result_box{position:absolute;z-index:101;background-color:#FFFFFF;border:1px solid #555555;padding:0px 5px 0px 5px;overflow:visible;display:none;text-align:left;}");document.write("span.span_match_text{text-decoration:underline;font-weight:bold;color:#FF6600;}");document.write("span.span_normal{background:#FFFFFF;}");document.write("span.span_highlight{background:#000000;color:#ffffff;cursor:pointer;}");document.write("</style>");document.write("<div id='msg'></div>");var req;var result_js_object; // 서버에서 넘어온 자료 evalvar save_js_object; // 실제 출력된 자료만 보관하는 변수var item;var textbox;var save_textbox; // 화살표가 이동하기전에 텍스트박스의 내용을 저장하고 다시 화살표가 돌아오면 원래값을 복원var before_textbox; // 바로전 텍스트박스 내용var current_line = -1; // 결과에서 현재 선택된 라인var count_for_id;var is_timer;var auto_request = false; // 자동 요청 (한글처리시 사용)var msg = document.getElementById('msg');function sug_set_properties(xelement, xserver_url, xignore_case, xany_where, xresult_box_width) { var props={ element: xelement, server_url: xserver_url, ignore_case: ((xignore_case) ? "i" : ""), any_where: ((xany_where) ? "" : "^"), // 중간에 있는 글자를 검색되게 할것인지? like: ((xany_where) ? 1 : 0), // SQL QUERY LIKE 앞 % result_box_width: xresult_box_width // 결과 박스를 textbox 의 폭과 같게 할것인지? }; if (textbox == null) textbox = xelement; sug_add_handler(xelement); return props;}//var isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!= -1);function sug_add_handler(objText){ objText.onkeydown = sug_textbox_keydown; objText.onfocus = sug_textbox_focus; //if (isOpera) objText.onkeypress = sug_textbox_keydown;}function sug_textbox_keydown(e) { if(window.event){ key = event.keyCode; textbox = event.srcElement; _event = event; } else{ key = e.which; textbox = e.target; _event = e; } auto_request = false; if (key == 13) { // 엔터키 if (current_line >= 0) textbox.value = save_js_object[current_line]; return; } else if (key == 38) { // 위 화살표 sug_move_key(-1); return; } else if (key == 40) { // 아래 화살표 if (current_line < 0) { // 화살표가 아래로 이동하기 전에 텍스트박스의 값을 저장 save_textbox = textbox.value; } sug_move_key(1); return; } else if (key == 219 || key == 220 || key == 221 || key == 222) { cancel_event(_event); return; } else if (key == 229) { // 한글 auto_request = true; is_timer = setTimeout("sug_request_han();", 100); } //msg.innerHTML += ","+key; is_timer = setTimeout("sug_request_eng()", 100);}function sug_textbox_focus() { textbox = this; current_line = -1; count_for_id = -1; sug_send_server(textbox.value);}function sug_make_matches(xcompare_str) { var node_value; count_for_id = 0; save_js_object = new Array(); var match_array = new Array(); var reg_exp = new RegExp(textbox.obj.any_where + xcompare_str, textbox.obj.ignore_case); for (i=0;i<item.length;i++) { node_value = item[i].firstChild.nodeValue; var is_match = node_value.match(reg_exp); if(is_match){ match_array[match_array.length] = sug_create_underline(node_value, xcompare_str, count_for_id); save_js_object[count_for_id] = node_value; count_for_id++; } } return match_array;}var underline_head = "<span class='span_match_text'>";var underline_tail = "</span>";var select_span_head = "<span style='width:100%;display:block;' class='span_normal' onmouseover='sug_set_color(this)' onmouseout='current_line=-1; sug_set_color(null);'";var select_span_tail ="</span>";function sug_create_underline(xstr, xtextmatch, xindex){ select_span_mid = " onclick='sug_set_text(" + xindex + ")'" + "id='options_list_" + xindex + "' index_no='" + xindex + "'>"; var reg_exp = new RegExp(textbox.obj.any_where + xtextmatch, textbox.obj.ignore_case); var start_pos = xstr.search(reg_exp); var matched_text = xstr.substring(start_pos, start_pos + xtextmatch.length); return select_span_head + select_span_mid + xstr.replace(reg_exp, underline_head + matched_text + underline_tail) + select_span_tail;}function sug_set_color(xtextbox){ if(xtextbox){ //current_line = xtextbox.id.slice(xtextbox.id.indexOf("_") + 1, xtextbox.id.length); //xtextbox.id.slice(xtextbox.id.indexOf("_") + 1, xtextbox.id.length); current_line = xtextbox.getAttribute("index_no"); } var opt; for(i=0; i<count_for_id; i++){ opt = document.getElementById('options_list_' + i); if (opt) opt.className = 'span_normal'; } var opt = document.getElementById('options_list_' + current_line); if (opt) { opt.className = 'span_highlight'; }}function sug_set_text(xindex){ textbox.value = save_js_object[xindex]; //set text value current_line = -1; //remove the selected index parent.textbox.form.submit();}// 위 아래 화살표 이동function sug_move_key(number) { current_line = parseInt(current_line); if (number < 0) { if (current_line < 0) { return; } } else { if (current_line >= count_for_id - 1) { return; } } current_line = parseInt(current_line) + parseInt(number); if (current_line < 0) { document.getElementById('options_list_' + 0).className = 'span_normal'; // 화살표가 이동하기 전에 저장된 값을 텍스트박스 값으로 넘김 textbox.value = save_textbox; } else if (current_line < count_for_id) { sug_set_color(null); textbox.value = save_js_object[current_line]; }}// request 생성function create_request() { var request = null; try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml12.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = null; } } } if (request == null) alert("Error creating request object!"); else return request;}// 서버로 보낸다function sug_send_server(query_string) { req = create_request(); link = "?q=" + query_string + "&like=" + textbox.obj.like; //url = "suggest_do.php?q=" + encodeURIComponent(q); req.onreadystatechange = sug_result_server; req.open("GET", textbox.obj.server_url+link, true); //req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); req.send(null);}// 넘어온 결과가 정상이라면 출력한다function sug_result_server() { if (req.readyState == 4) { if (req.status == 200) { sug_result_box_position(textbox); // 새로운 결과가 나오면 현재 라인을 -1 로 설정 current_line = -1; count_for_id = -1; document.getElementById('span_output').style.display = "none"; document.getElementById('span_output').innerHTML = ""; var str = ""; // 넘어온 데이타를 자바스크립트 배열로 만든다 save_js_object = new Array(); //result_js_object = eval(req.responseText); var items = req.responseXML.getElementsByTagName("items"); //var rq = items[0].getElementsByTagName("rq"); /* if (result_js_object) { // 매치된 결과에 언더라인을 출력 var result = sug_make_matches(textbox.value); for(i=0;i<count_for_id;i++) { str += "<div style='width:100%;padding:0px 0 0 0px;height:18px;cursor:pointer;' id='f"+i+"'>" + result[i] + "</div>"; } } */ if (items.length > 0) { item = items[0].getElementsByTagName("item"); // 매치된 결과에 언더라인을 출력 var result = sug_make_matches(textbox.value); for(i=0;i<count_for_id;i++) { str += "<div style='width:100%;padding:0px 0 0 0px;height:18px;cursor:pointer;' id='f"+i+"'>" + result[i] + "</div>"; } } if (count_for_id > 0) { document.getElementById('span_output').innerHTML = str; document.getElementById('span_output').style.display = "block"; } } }}// 결과박스의 포지션 설정function sug_result_box_position(xelement){ var el_width = xelement.offsetWidth; var el_height = xelement.offsetHeight; var el_x = el_y = 0; var obj = xelement; while (obj.offsetParent) { el_x += obj.offsetLeft; el_y += obj.offsetTop; obj = obj.offsetParent; } span_el = document.getElementById("span_output"); span_el.style.left = el_x; span_el.style.top = el_y + el_height; if (xelement.obj.result_box_width) span_el.style.width = el_width; span_el.style.display = "block";}// 한글 키보드 입력 처리function sug_request_han() { if (before_textbox != textbox.value && auto_request) { before_textbox = textbox.value; try { sug_send_server(textbox.value); } catch (e) { if (auto_request) is_timer = setTimeout("sug_request_han();", 100); return 0; } } if (auto_request) is_timer = setTimeout("sug_request_han();", 100);}// 영문+기타 키보드 입력 처리function sug_request_eng() { // 검색어가 20글자 미만이라면 if(textbox.value.length < 20) { sug_send_server(textbox.value); } if (!auto_request) clearTimeout(is_timer);}function cancel_event(e) { e.returnValue = false; if (e && e.preventDefault) e.preventDefault();}
http://sir.co.kr/g4_skin/56451?sfl=mb_id%2C1&stx=ican 글의 suggest.js 입니다.
검색어를 입력하면 검색결과창이 내려오는데 브라우져 크기가 변하면 상/하로는 고정이 되는데
좌/우로는 고정이 되지를 않으네요. 조언 좀 부탁 드립니다.
답변 1개
돼지코구뇽
2015-12-27 (일) 11:41:30
<select style=width:150px;">
이걸로 고정하심이..
답변을 작성하려면 로그인이 필요합니다.