테스트 사이트 - 개발 중인 베타 버전입니다

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

jaykjayk5 6년 전 조회 3,777

http://torrentluv.com/bbs/search.php" rel="nofollow noreferrer noopener" target="_blank">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개

6년 전

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

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

<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개

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

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

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

6년 전

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

 

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

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

답변에 대한 댓글 5개

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

이런식으로 감싸면 되지 않을까요?
j
jaykjayk5
6년 전
안되네요. ㅠ.ㅠ

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

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

로그인