2011-09-02 9 views
0

다른 많은 사람들처럼 아약스로로드하는 외부 페이지의 스크립트를 다루는 데 문제가 있습니다.아약스에서로드 된 여러 스크립트를 처리하기위한 구조

페이지 상단에 "관리 패널"이있는 페이지를 설정하려고합니다. 패널 내에서 여러 관리 페이지로 이동할 수 있기를 원합니다. 다른 관리 페이지에는 내부에 <script>과 외부 js 파일이 있습니다. 스크립트는 꼭로드해야하지만 겹쳐 보이거나 좋은 방법으로 관리되지 않는 것 같습니다. 그래서 두 개의 경고마다 내가 사업부를 클릭을 얻을 여기

$('.left-col').click(function() { 
    alert(); 
}); 

, 나는 그것이 또 다른 클릭 바인딩이 페이지로 돌아올 때마다 :

나는 관리자 페이지 중 하나에 작은 테스트를했다 . 내 ajax.success에서 $('.left-col').unbind();을 실행하면 쉽게 해결할 수 있습니다.

일부 관리 페이지의 경우 .click/.change/.live 등이 많으며 외부 플러그인의 내용이 무엇인지 확실하지 않습니다. 그래서 어떻게 든 각 바인딩을 해제/각 요소를 지정하지 않고 내 아약스로드 된 각 페이지에서로드 된 스크립트를 제거 할 수 있습니까? 내가 바인딩 해제와 셀렉터를 사용할 수 있지만 그것은 각 div/img/입력 등 unbind 루프를 매우 효과적인 것, 그리고 그것이 잘 작동하는지 잘 모르겠다. 어떤 도움에 감사드립니다

<script type="text/javascript"> 
$(document).ready(function() { 

function reloadAdminPanel(url) { 
    if(typeof(url) === "undefined") { 
     var url = '/admin/panel/dashboard/'; 
    } 

    $.ajax({ 
     'success': function (data, textStatus) { 
      var jData = $(data); 

      // override links in admin to run reloadAdminPanel() 
      jData.find('a').each(function() { 
       var newUrl = $(this).attr('href'); 

       $(this).click(function(e) { 
        reloadAdminPanel(newUrl); 
        return false; 
       }); 

      }); 


      $('div.panel__inner').remove(); 
      $('body').prepend(jData); 
      delete jData; 
     }, 
     'url': url 
    }); 

} 
reloadAdminPanel(); 
}); 
</script> 

, 환호 : 나는 관리자 페이지를로드하는 방법

이입니다!

페이지의 구조 :

<html> 
<body> 
<div class="panel__inner"> <!-- admin panel --> </div> 
    <!-- rest of project site --> 
</body> 
</html> 

답변

0

어쩌면 ITD 도움이 당신이 우리 요소의 구조를 보여 주면 있지만, JQuery와에 "제거"의 정의에서,이 요소를 제거해야합니다, 그 아이, 모든 이벤트 및 이와 관련된 모든 데이터.

div.panel__inner는 body 태그 안에 있습니까? 나는 당신이 div에서 remove를하고 있지만 $ (body)에 데이터를 prepending하는 것을 보았다. 본문 내용 자체를 제거 할 수 있습니까?

+0

관리자 페이지는 상당히 광범위하며 많이 다릅니다. 그러나 각 페이지의 내용 주위에 div.panel__inner를 배치 했으므로 다른 페이지를로드 할 때 쉽게 제거 할 수 있습니다. $ (body)는 내가 관리 패널을로드하는 프로젝트 페이지를 참조합니다. 그래서 나는 시체를 지우고 싶지는 않습니다. – acetrand

관련 문제