2017-04-17 8 views
2

다음은 div를 클릭하면 내용을 표시하고 숨기는 내 스크립트입니다. 첫 번째 div를 다시 클릭 할 때까지 다른 div 요소를 비활성화하려고합니다.jquery를 토글 해제로 설정하는 방법

$('.leader-pic-wrapper').click(function(){ 
    var $el = $(this); 
    var bottom = $el.position().top + ($el.outerHeight(true) - 30); 
    $('.leader-pic-overlay').toggle(); 
    $('.leader-pic-wrapper').not(this).toggleClass('inactive-leader'); 

    /*$(".inactive-leader").unbind("click");*/ 
    $(".inactive-leader").off("click"); 

    $(this).next('.leader-profile-wrapper').css('top', bottom); 
    $(this).next('.leader-profile-wrapper').toggle(); 
}); 

언 바인드 문을 토글하는 방법을 모르겠다. 비활성 리더라는 클래스를 토글 링 해보고 해당 클래스에 바인딩 해제를 적용했지만 작동하지 않았습니다.

는 기본적으로 나는

+1

? 어쩌면 ** on() 및 off() **를 사용하여 이동 ** – DaniP

+0

방금 ​​시도해 보았습니다. 그러나 문제는 여전히 남아 있습니다. 같은 요소를 두 번째 클릭 할 때 어떻게해야합니까? –

+0

바인딩 대신 또는 바인딩 상태를 추적하고 단지 하나의 초기 바인딩, 그리고 var (또는 하나 이상의 필요하다면 상태 바스의 배열)를 업데이 트하고 상태를 확인하는 var를 사용하는 것이고, 상태를 확인하십시오 – Diego

답변

2

내 옵션은 다른보기와 접근 방식이있다

leader-pic-wrapper 

감사에 바인딩을 해제 설정합니다. 이벤트를 바인드 및 바인드 해제하지 않고 :not()을 사용하여 첫 번째 선택기로 항목을 제외하면 제외하려는 요소에 클래스를 추가합니다. 과 같이 표시됩니다

$('body').on('click', '.box:not(".disabled")', function() { 
 
    if ($('.disabled').length) { 
 
    $(this).siblings().removeClass('disabled') 
 
    $(this).animate({ 
 
     'width': '80px' 
 
    }, 300) 
 
    } else { 
 
    $(this).siblings().addClass('disabled') 
 
    $(this).animate({ 
 
     'width': '160px' 
 
    }, 300) 
 
    } 
 
})
.box { 
 
    display: inline-block; 
 
    height: 80px; 
 
    width: 80px; 
 
    background: tomato; 
 
    margin: 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="box"></div> 
 
<div class="box"></div> 
 
<div class="box"></div> 
 
<div class="box"></div>


코드에이 논리 :이 조각을 확인하십시오 사용중인 버전

//Delegate the event since we are add/remove the class 
//Target the elements that aren't inactive 
$('body').on('click', '.leader-pic-wrapper:not(".inactive-leader")', function() { 
    var $el = $(this); 
    var bottom = $el.position().top + ($el.outerHeight(true) - 30); 

    //Check if exists some inactive elements to handle 1/2 click 
    if ($('.inactive-leader').length) { 
    //Target other leader-pic-wrapper elements, use sibling or the method you need based on your markup 
    $(this).siblings().removeClass('inactive-leader') 
    //...ACTIONS - This will act as the second click 
    } else { 
    $(this).siblings().addClass('inactive-leader') 
    //...ACTIONS - This will act as the first click 
    } 
}); 
+0

이것은 완벽하게 .. . 내가 이것을 충분히 이해하기 전에 약간의 문서를 읽을 필요가 있습니다. –

+0

이 코드 줄에 대해 궁금한 점이 있으시면 언제든지 U @ StacyJ에 도움을 주시면 기꺼이 도와 드리겠습니다. – DaniP

+0

안녕하세요. div 요소 외부에 닫기 버튼을 추가해야합니다. 이 div는 .box를 클릭하면 닫히고 닫기 버튼이 있습니다. 여분의 코드 블록을 작성했습니다. 닫기 버튼을 클릭하면 div가 닫히고 비활성 리더 클래스는 제거됩니다. 닫기 버튼을 사용하여 닫은 후에는 .box에서 일반적인 방법으로 작동하려면 두 번 클릭해야합니다. 왜 그런지 알 수 있습니까? –