2010-04-08 5 views
0

그래서 화살표를 클릭하면 내용 상자가 닫히고 확장됩니다. 내용 상자에는 열려 있는지 또는 닫혀 있는지를 나타내는 두 개의 클래스가 있습니다 (.box_open, .box_closed). 호버 기능은 box_open에 지정되어 있으므로 열려있을 때 헤더 위로 마우스를 가져 가면 화살표가 나타납니다. 그러나 상자가 닫힐 때 화살표가 보이기를 원하기 때문에 상자를 닫을 때이 작업을 원하지 않습니다. 상자가 닫히면 box_open 클래스가 제거되지만 해당 클래스에 할당 된 함수는 계속 작동합니다.Jquery 클래스가 작동하지만 다른 함수에 영향을주지 않습니다.

두 함수의 jquery 코드는 다음과 같습니다. 또한 아래의 데모 헤드에서 볼 수 있습니다.

// Display Arrow on Box Header Hover 

     $(".box_open").hover(
      function() { 
       $(this).find('a').show(); 
      }, 
      function() { 
       $(this).find('a').hide(); 
      } 
     ); 

    // Open and Close Boxes: 

     $(".box_header a").click(
      function() { 
       $(this).parent().next('.box_border').stop().toggle(); 
       $(this).parent().toggleClass("box_open"); 
       $(this).parent().toggleClass("box_closed"); 
       return false; 
      } 
     ); 

누구든지 문제가 무엇인지 살펴볼 수 있습니까? CSS 파일에서 Demo Url

답변

2

이벤트 처리기는 클래스 레이블이 아니라 요소에 할당됩니다. 따라서 일단 할당되면 클래스 이름을 제거한다고해서 핸들러가 사라지는 것은 아닙니다.

'box_header'에 이벤트를 할당하고 hover() 코드에 'box_open'클래스가 있는지 확인하십시오.

$('.box_header').hover(
function() { 
    $(this).find('a').show(); 
}, 
function() { 
    if($(this).hasClass('box_open')) 
     $(this).find('a').hide(); 
}); 

편집 : 누락 된 괄호가 추가되었습니다. 조잡한 나!

+0

if 문 구문에 약간 혼란 스럽습니다. 앱 타나 (Aptana)는 그것을 지적하고 있지만, 나 인생이 잘못되었다고 생각할 수는 없다. 내 방법에 문제가 무엇인지, 그리고 왜 이것이 작동해야하는지 이해하지만 구문이 나를 죽이려한다. – Qwibble

+0

걱정할 필요가 없다. 구문을 처리했다. =) – Qwibble

0

넣어이 :

다음은 데모 URL입니다.

.box_closed a { 
    display: inline !important; 
} 
+0

사용중인 경우에도 .box_hover 클래스가 변경되었으므로 아무런 차이가 없습니다. – Qwibble

+0

@Qwibble 나는 미안 해요 .box_closed :) –

1

패트 릭의 대답은 정확하지만 더 나은 방법이 있습니다. jQuery.live()를 사용하면 "현재 셀렉터와 현재 또는 미래에 일치하는 모든 요소에 대한 이벤트에 핸들러를 첨부 할 수 있습니다. "

그래서,이해야 더 또는 덜 당신이 원하는 걸 얻을 :

$('.box_open').live('hover', function (event) { 
    if(event.type === 'mouseenter') { 
     $(this).find('a').show(); 
    } 
    else { 
     $(this).find('a').hide(); 
    } 
}); 

바로 the jQuery docs에서 거의 데친.

+0

하지만 상자를 닫을 때마다 이벤트의 바인딩을 해제해야한다. . 이것은 단순한'if()'문보다 훨씬 더 효과적입니다. – user113716

+0

.live()를 보았지만 해결 된 것보다 더 많은 문제가있는 것 같았습니다. if 문이 잘 작동하고 논리를 이해 하므로서 만듭니 다. =) 도움말에 대한 환호 =) – Qwibble

+0

@ 패트릭 : 질문을 올바르게 이해하면 해당 이벤트가 언 바운드 될 필요가 없습니다. 상자를 닫는 것은'box_open' 클래스를 제거하고'box_close' 클래스를 적용한다는 것을 가정하기 때문에 상자가 닫혀 있습니다. 내가 잘못? –

관련 문제