만들면서 배우는 CodeIgniter Q&A

제목 검색 버튼 클릭 시 경고창이 뜹니다.
글쓴이 소연신 작성시각 2016/06/30 22:11:19
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 10558   RSS

board/lists/board/search/'+$("#q").val()+'/page/1

=> 주소창으로 검색하면 검색이 잘 됩니다.

그런데 뷰에서 검색어를 넣고 검색 버튼을 누르면 검색어를 입력하라는 경고창이 뜨네요. 검색어는 있는데요. 이거 제이쿼리 문제인가요? 

 다음글 Chapter4 게시판 프로젝트 bootstrap.cs... (3)
 이전글 4장 소스받아서 그대로 실행하는데 (1)

댓글

변종원(웅파) / 2016/06/30 22:44:36 / 추천 0

jquery 부분 에러입니다.

해당 소스 올려주세요.

소연신 / 2016/07/01 09:03:17 / 추천 0

#변종원(웅파)

->head.php

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="http://localhost/movie/static/lib/bootstrap/js/bootstrap.min.js"></script>

<script>
      $(document).ready(function() {
        $("#search_btn").click(function() {
          if($("#q").val() == '') {
            alert('검색어를 입력하세요.');
            return false;
          } else {
            var act = 'http://localhost/movie/index.php/board/lists/board/q/'+$("#q").val()+'/page/1';
            $("#bd_search").attr('action', act).submit();
          }
        });
      });

->lists.php(view)

<form id="bd_search" class="navbar-form text-center" method="post">
        <input id="q" type="text" class="form-control" name="search_word" placeholder="Search..." onkeypress="board_search_enter(document.q);" />
        <input id="search_btn" type="button" value="검색" class="btn btn-info">
      </form>

 

실제로는 id값을 다르게 했는데 책과 같이 해도 안되네요ㅜ 오타가 있는건가 어디..

kaido / 2016/07/01 09:14:51 / 추천 0

얼핏 보니

 $("bd_$search").attr('action', act).submit();

이부분이 걸리네요. 

$ 가 붙는 경우는 크게 2가지 이죠.

$("#select") jquery 에서 약식으로 사용할때와

<?php echo $search; ?>

php 코드의 변수 선언.

 

혹은 오타 ( ..)

소연신 / 2016/07/01 09:19:49 / 추천 0

#kaido

 

오타였네요 그거 고쳤습니다...하지만 안되네요ㅜㅜ 어딘가 숨어있을 오타의 가능성이..ㅜㅜ

kaido / 2016/07/01 09:32:48 / 추천 0

해당 오류가 나오는 케이스는 2가지 뿐입니다.

js 에서 오류가 나오고 있다거나.

id="q" 가 중복으로 있다거나.

 

이런 id 중복 문제를 해결 하기 위해서 좀더 정확한 타겟을 지정 하거나, 혹은 id 중복을 미연에 피하던가 해야합니다.

if($("#q").val() == '') {...}

이렇게 변경해 보세요.
 
if($("#bd_search > #q").val() == '') {...} 

 

혹은..

<input id="q" type="text" class="form-control" name="search_word" placeholder="Search..." onkeypress="board_search_enter(document.q);" />
이것을

<input id="head_q" type="text" class="form-control" name="search_word" placeholder="Search..." onkeypress="board_search_enter(document.q);" />


 if($("#q").val() == '') {...}  
이것을
 if($("#head_q").val() == '') {...}  
이렇게.

 

애초에 id 는 한 페이지 내에서 유일하게 1개만 존재 해야 합니다.

 

소연신 / 2016/07/01 09:42:35 / 추천 0

#kaido

타겟을 다시 주니까 되네요 .

if($("#bd_search > #q").val() == '')ㄴ

요기랑

'+$("#bd_search > #q").val()+

..왜 이렇게 줘야만 작동 되는건가요? 왜 한 번에 못찾는거지ㅜ

kaido / 2016/07/01 10:34:53 / 추천 0

@소연신

애초에 id 는 한 페이지 내에서 유일하게 1개만 존재 해야 합니다. <-- 이 때문입니다.

찾아보시면 id="q" 를 선언한게 어딘가에 더 있을 것입니다.

헤더파일에 따로 본문에 따고 푸터에 따로 선언했다고 다르게 인식 하지 않습니다.

전체 랜딩된 페이지에서 id 엘레먼트는 1개만 있어야만 하는게 규칙입니다.

동일한 이름을 가진 사람이 10명 있는데 이름을 불러서 특정한 1명을 찾을수 없듯이요.

 

 

해당 구문은 #db_search 아래에 #q 만 찾으라는 의미이고 #q만 넣으면 전체에서 #q를 찾으라는 의미입니다.

 

 

 

변종원(웅파) / 2016/07/01 11:33:02 / 추천 0
id는 문서내 1개만 존재해야 하고 class는 여러 개 존재할 수 있습니다.
소연신 / 2016/07/01 11:50:27 / 추천 0
감사합니다.