2011-11-18 2 views
0

jQuery의 브라우저에 표시되기 전에 Ajax가로드 된 페이지에 포함 된 요소에 클래스를 추가하려고 시도 중입니다. 순간에 어떻게됩니까addClass Ajax로드하기 전에

$("#landing li.nav4 a").live('click', function() { 
    $("#landing").fadeOut('slow', function(){ 
     $('#agency').load('assets/ajax/agency.html').fadeIn(function(){ 
      $("#agency-main nav li.nav1 a").addClass("nav1-on"); 
     }); 
    }); 
    return false; 
}); 

는 페이지가로드 된 다음 클래스가 추가되고로드 된 클래스 (배경 이미지)와 같은 눈에 띄는 "플래시"이 : 여기 내 코드입니다.

콘텐츠를로드하고 클래스를 추가 한 다음 fadeIn을 순서대로 삽입 하시겠습니까?

+0

그것은 분명하지 않다. 이것은 항상 사용할 수있는 것이거나'agency.html'의 내부에서만 사용할 수 있습니까? –

+0

은 agency.html 내부에서만 사용 가능합니다. – Yahreen

+0

그래서 'agency-main nav li.nav1 a'는 *'agency.html'이로드되었지만'addClass ('nav1-on')'을 그 전에 *'agency.html'이'# agency'에로드되기 전에? –

답변

1

저는 jquery 멍청한 녀석이에요. 제 자신의 학습에 더 많은 것이 있습니다. (그런데 무겁게 이상의 자격을 갖춘 선택!)`` "는 li.nav1 # 기관 메인 탐색은"해당 클래스를 추가해야하기 위해 문서에 사용할 수있을 때

//make sure #agency is defaulted to display:none, or add a line to check this 
$("#landing li.nav4 a").live('click', function() { 
    $('#agency').load('assets/ajax/agency.html', function() { 
    $("#agency-main nav li.nav1 a").addClass("nav1-on"); 
    }); 
    $("#landing").fadeOut('slow', function(){ 
    $('#agency').fadeIn(); 
    }); 
    return false; 
}); 
+0

''# agency-main nav li.nav1 a "'는 agency.html 안에 있으므로 클래스를 추가하기 전에 먼저 agency.html을로드해야합니다. – Yahreen

+0

어떨까요? (위 편집) – themerlinproject

+0

Heh. 완전히 일했다. 고맙습니다. 모두에게 감사드립니다. – Yahreen

0

클래스를 백그라운드에 연결하려는 요소를 만든 다음 원하는 경우 삽입 할 수 있습니다. 당신이 jsfiddle에 코드를 작성할 수있는 경우

같은 ..

el = $("#landing"); 
//fadeout el 
//remove from html 
//add class 
//insert it back in 

, thta 매우 도움이 :)

0

가 nutbar 전화 해가 될 것입니다,하지만 난 모든 당신이 필요로 할 때 만 콜백을 해독 싫어

: 당신이 걸릴하거나 떠날 수 2 개 다른 권장 개선

$("#landing li.nav4 a").on('click', function(event) { 
    event.preventDefault(); // better than return false; 
    $agency = $('#agency'); // cache it since we use it twice 

    // fade out the landing div, and when that's done load agency.html into #agency 
    // presumably, #agency is already hidden 
    $("#landing").fadeOut('slow', function(){ 
    $agency.load('assets/ajax/agency.html'); 
    }); 

    // add the class to the nav item 
    $("#agency-main nav li.nav1 a").addClass("nav1-on"); 

    // fade #agency in 
    $agency.fadeIn(); 
}); 

주의 사항 : 이벤트의 관리 순서는

  1. .on()에 대한 .live()는 jQuery 1.7에서 사용할 수 있습니다. 이전 jQuery를 사용하는 경우 .live() 대신 .delegate()를 계속 살펴 봐야합니다.

  2. 012P은 preventDefault()를 사용하여 클릭 이벤트가 기본값으로 버블 링되는 것을 중지합니다. 이는 코드를 검토 할 때보다 효율적이며 이해하기 쉽습니다.

+0

또한이 기간이 지나치게 길어질 가능성이 있습니까? jQuery는 모듈화되어 있지 않습니다 (특히'nav4 a '에 대한 클릭으로 궁극적으로'nav1 a '를 궁극적으로 수정합니다. 의도 한 결과 일 수 있지만 재사용 할 수는 없습니다!). 그래서 매우 구체적이기 때문에 클래스가 이미 추가 된 상태에서 agency.html을 반환하지 않는 이유는 무엇입니까? –

+0

네, 아마도 당신 말이 맞아요. 탭에서 여러 개의 removeClass를 관리하는 것을 피하려고했지만 어쨌든 그렇게해야 할 것입니다. 고마워. – Yahreen