2011-05-16 2 views
1

외부 함수에서 반환 한 true 또는 false를 기반으로 div에 jquery plugin 메서드를 분리했다가 다시 연결하려고합니다. unbind를 사용하면 div에서 accordion() 메서드를 분리 할 수 ​​있지만 div에 accordion 메서드를 다시 바인딩 할 수는 없습니다. unbind 메서드가 실행되면 조건이 true를 반환하더라도 "$ ('. container'). accordion()"코드가 작동하지 않습니다. 플러그인 방법의 바인딩을 해제 한 다음 다시 바인딩하는 올바른 방법을 제안하십시오.플러그인 메서드를 연결하고 분리하는 방법

<div class="container" onmousedown="abc()"> 

자바 스크립트 : 아래

은 기준 -

HTML의 샘플 코드

function abc(){ 
    if (true) { 
    $(".container").accordion(); 
    } else { 
    $(".container").unbind(); 
    } 
} 

답변

1

unbind를 사용하지 마십시오; 대신 "destroy"명령을 사용하십시오. 예를 들어

는 :

function abc(){ 
    if (/* condition */) { 
    $(".container").accordion(); 
    } else { 
    $(".container").accordion('destroy'); 
    } 
} 

docs를 참조하십시오. 상황에 따라 enabledisable 명령을 대신 사용하는 것이 더 적절할 수 있습니다.

+0

덕분에 많이 발생했습니다. 이것은 작동 중입니다. – user713332

+0

@ user713332 도와 드리겠습니다. 답변으로 질문이 해결되면 [수락 된 것으로 표시 할 수 있습니다] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). – lonesomeday

0

그것은 당신이 그 방법이없는의 아코디언 바인딩을 해제 ... 그래서 다시 바인딩 할 필요하면 ... 당신이 할 수있는 일이 당신의 아코디언 JS 때마다 호출이기 때문이다 ...

function abc(){ 
    if (true) { 
    $.getScript("accordion.js", function(){ 
    alert("reinitialized"); 
    }); 
    $(".container").accordion(); 
    } else { 
    $(".container").unbind(); 
    } 
} 
0

나는 직접적인 대답이 없지만 단서가있는 것 같습니다.

div에 어떤 ​​클래스가 추가되었는지 확인한 다음 accordion()을 적용하십시오. Firebug에서 쉽게 볼 수 있습니다. 코드가 명확하므로 코드는

function abc(){ 
    if (!$(".container").hasClass('some_accordion_class')) { 
    $(".container").accordion(); 
    } else { 
    $(".container").destroy(); 
    } 
} 
관련 문제