2026, 새로운 도약을 시작합니다.

검색어를 입력하면 첫자가 자꾸 지워져요. 채택완료

http://torrentluv.com/bbs/search.php

여기서 검색란에 첫글자를 집어넣으면 그 글자가 지워집니다.

문제는 처음 입력시에만 그런다는 겁니다. 그리고 크롬에서만 그러네요.

ctrl+f5 누르시고 바로 한글을 입력해 보세요.

번거로워요. 해결책 있을까요?

오토컴플리트 스크립트 때문인 것 같아서 그 소스를 아래에 삽입합니다.

아.. 지금 보니까 한글만 그러네요. 왜 그럴까요? 숫자나 영문자는 안지워지네요.

<script>
$(document).ready(function() {

    // 오토컴플리트 (검색어 자동완성)
    $("#thema_wrapper").on("keyup", "#stx", function(){
        var stx = $(this).val(); /* 입력한 검색어 */
        $(this).autocomplete({
            source:function(request, response) {
                $.getJSON(g5_url+"/_search_popular.php", {
                    /* _search_popular.php 파일로 넘길 변수값을 이곳에 작성하시면 됩니다. GET 으로 넘어갑니다. */
                    /* 콤마로 구분하시면 되요 ex) sfl:"wr_subject", stx:stx, ........ */
                    stx : stx
                }, response);
            },
            minLength:2, /*최소 검색 글자수*/
            delay: 150,  /* 검색어 입력후 표시되는 시간 - 숫자가 클수록 느리게 출력 */
            focus:function(event, ui) {
                /* 검색을 통하여 넘어온 값을 여기서 처리 */
                console.log(ui.item.value); /* 콘솔 확인용이므로 삭제하거나 주석처리 하여도 됩니다. */
            },
            close:function(event, ui) {

            }
        })
    });
    // 오토컴플리트 종료

});
</script>

<?php
include_once('./_common.php');
$stx = $_GET['stx'];
$sql = "select
            distinct(pp_word)
        from
            g5_popular
        where
            pp_word like '%".$stx."%'
        group by
            pp_word
        order by
            pp_word asc limit 10 ";
$result = sql_query($sql,true);
// value : 검색된 단어이며, input 값으로 넘어갑니다.
// label : 특정검색어를 입력시 자동완성 리스트로 표시됩니다. (다양하게 응용가능)
while($row=sql_fetch_array($result)) {
    $arr[] = array(
                "value"    => $row['pp_word'],
                "label"    => $row['pp_word']
                );
}
echo json_encode($arr);
?>

답변 2개

제가 보기에는 아래 소스 때문에 그럴거라 보입니다.

아래 부분을 지우고 시도해 보시죠.

<script>
$(document).ready(function() {

    // 오토컴플리트 (검색어 자동완성)
    $("#thema_wrapper").on("keyup", "#stx", function(){
        var stx = $(this).val(); /* 입력한 검색어 */
        $(this).autocomplete({
            source:function(request, response) {
                $.getJSON(g5_url+"/_search_popular.php", {
                    /* _search_popular.php 파일로 넘길 변수값을 이곳에 작성하시면 됩니다. GET 으로 넘어갑니다. */
                    /* 콤마로 구분하시면 되요 ex) sfl:"wr_subject", stx:stx, ........ */
                    stx : stx
                }, response);
            },
            minLength:2, /*최소 검색 글자수*/
            delay: 150,  /* 검색어 입력후 표시되는 시간 - 숫자가 클수록 느리게 출력 */
            focus:function(event, ui) {
                /* 검색을 통하여 넘어온 값을 여기서 처리 */
                console.log(ui.item.value); /* 콘솔 확인용이므로 삭제하거나 주석처리 하여도 됩니다. */
            },
            close:function(event, ui) {

            }
        })
    });
    // 오토컴플리트 종료

});
</script>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

뭐를 지우신거죠? 제가 보기엔 위에 소스랑 같아 보이는데...
혹시 스크립트 전체를 지우라시는건 아니죠? 이게 없으면 자동완성검색도 없는데요?
에러나는 스크립트를 수정할 수는 없고 검색은 사용하셔야하고 한다면
자동완성스크립 전체를 포기하셔야겠죠.

제가 보기에 주된 에러는 getJSON함수에 있는 듯 하네요.
그 부분을 잘 처리해 보시죠.
아마도 url이 SOP(Same Origin Policy)에 맞지 않아 에러가 나는 듯 보입니다.
감사합니다.

댓글을 작성하려면 로그인이 필요합니다.

한글의 경우 한글자만 입력해도 바이트수가 많다보니 2글자로 인식하는것 때문에 그런것 같은데요.

어차피 2자 이상이니 이벤트 부분을 stx가 2글자 이상일때만 동작하게 하시면 될 것 같습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

이미 그렇게 되어 있는데요. 2글자 이상일때만 결과값이 나옵니다.
해당 라이브러리 실행 자체를 2글자 이상부터 하시라는 이야기였습니다.
minlegnth가 아니라 stx에서 글자가 아예 2글자 이상부터 이벤트 실행을 할 수 있게
어떻게 그렇게 하죠? 이해를 못했습니다.
if(stx.legnth>=2)
{
$(this).autocomplete({
..
..
}

이런식으로 감싸면 되지 않을까요?
안되네요. ㅠ.ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고