2014-09-25 6 views
0

divs를 거쳐 이름/ID가 있으면 자동 완성 유형을 작성하여 목록에 추가합니다. 나는 어떤 종류의 입력 변경이라도 호출되는 온라인에서 발견 한 이벤트 핸들러를 사용하고있다. 내가 겪고있는 문제는 다음과 같습니다. 유효한 div가 발견되어 자동 완성 목록에 추가 된 다음 사용자가 계속 입력했지만 잘못된 div 이름을 입력하면 div 이름이 목록에서 제거됩니다. 그러나 div가 없으면 목록은 유지되지만 비어 있습니다.입력 변경시 div 제거

더 나은 방법은 그것을 시도하는 것입니다.

http://jsfiddle.net/ypz0zrzv/21/

상자에 입력 "시험 장치"를 선택한 후 무작위 문자를 입력하는 것을 계속한다. 내가 지금 비어있는 목록을 제거하려고합니다. 문제는 그러한 기능을 구현할 때 두 번째 문자가 입력 된 후에 만 ​​발생한다는 것입니다. 핸들러가 입력 변경시 목록을 확인하기 때문입니다.

그래서 "Test Unit"을 입력하면 div가 추가됩니다. "Test Unita"라고 입력하면 빈 자동 완성 div가 표시됩니다. "test Unitaa"라고 입력하면 이제 자동 완성 div가 사라집니다. 나는 div가 발견되지 않은 즉시 자동 완성을 비워 버리는 방법에 의아해합니다. 문제

코드 문제는 자동 완성에 대한

if ($('#autocomplete_list li').length === 0){ 
    hide_remove($('#autocomplete')) 
} 

답변

0

수표가 잘못된 위치에 있었다. 그것은 잘못된 사건에 의해 유발되었습니다.

function checkArray(){ 
    console.log($('#autocomplete_list li').length); 
    if ($('#autocomplete_list li').length <= 0){ 
     hide_remove($('#autocomplete')) 
    } 
} 

는 다음 나는 hide_remove() 함수로 그 checkArray() 기능을 추가 :

나는 경우에 당신은 나중에이 검사를 호출 할, 자신의 기능에 체크를 옮겼습니다.

function hide_remove($div){ 
    if ($div.length > 0){ 
     $div.slideUp(250, function(){ 
      $div.remove(); 
      checkArray(); 
     }); 
    } 
} 

여기는 DEMO입니다. 희망이 도움이!

+0

감사합니다. 그러나 재귀에 위험이 있습니까? hide_remove는 hide 배열을 호출하는 check 배열을 호출 할 것입니다. – tdoakiiii

+0

여러분의 요지를 보았지만 콘솔 로그를 확인하십시오. 재귀를 일으키지 않는 것 같습니다. 그렇지 않으면 콘솔은 배열의 길이를 계속 출력합니다. – wrxsti

+0

또한 필요한 경우 해당 기능을 트리거 할 수있는 또 다른 곳이 있다고 확신합니다. – wrxsti