2011-09-28 5 views
1

내 프로젝트에서 개체 리터럴을 사용하고 있습니다. jquery로 선택을 타겟팅하고 있습니다. 그것은 처음에는 잘 작동하지만 대상 부분이 AJAX로 다시로드되면 더 이상 그 요소를 대상으로 지정할 수 없습니다. 하지만 나는 방화범이 눈에 띈다. 거기에있는 방화범이 ... 내 코드가 작동하는지 테스트하기 위해 console.log()를 사용하고있다.하지만 그걸 선택하고 싶지는 않다. 따라서 작동하려면 브라우저 전체를 새로 고쳐야합니다. AJAX dom reload 및 selector와 어떤 관련이 있는지 알고 있습니까? 나는 그것이 DOM이 다시로드 및 자체 또는 그 라인을 따라 뭔가를 다시 그리는 함께 할 수있는 뭔가 생각AJAX를 통해 다시로드 할 때 내 요소가 대상으로 지정되지 않습니다.

... 여기

내 코드입니다 : 당신이 페이지에 요소를 교체하는 경우

Module.editWishlistTitle = { 
    wishListContent: $('.mod-wish-list-content'), 
    title: $('.title').find('h2'), 
    titleTextField: $('#wishlist-title-field'), 
    titleInnerContainer: $('.title-inner'), 
    editTitleForm: $('.edit-title-form'), 
    submitCancelContainer: $('.submit-cancel'), 
    notIE9: $.browser.msie && $.browser.version < 9, 

edit: function() { 
    var fieldTxt = this.titleTextField.val(), 
     editForm = this.editTitleForm, 
     titleParent = this.titleInnerContainer, 
     fieldCurrentTitle = this.title.text(); 

    this.titleTextField.val(fieldCurrentTitle); 

    this.submitCancelContainer.removeClass('hidden'); 

    if (!this.notIE9) { 
    editForm.css('opacity', 0).animate({ opacity: 1 }).removeClass('hidden'); 
    titleParent.addClass('hidden').animate({ opacity: 0 }); 
    console.log(editForm); 
    } else { 
    editForm.removeClass('hidden'); 
    titleParent.addClass('hidden'); 
    } 

} 

init: function() { 
    var self = this; 

    console.log(this.editTitleForm); 

    //edit 
    this.wishListContent.delegate('.edit-title a', 'click', function (e) { 
    self.edit(); 
    e.preventDefault(); 
    }); 
}; 

답변

2

요소에 대한 원래 참조를 파기하고 있습니다. 새 요소를 가리 키도록 참조를 다시 실행해야합니다.

코드에서 필요한 참조를 (다시) 초기화하는 새 메서드를 만듭니다. odject에 추가하는 대신 메소드에서 설정하십시오.

기본 아이디어 :

Module.editWishlistTitle = { 
    wishListContent: $('.mod-wish-list-content'), 
    title: $('.title').find('h2'), 
    //titleTextField: $('#wishlist-title-field'), 
    ... 
    ... 
    initReferences : function(){ 
     this.titleTextField = $('#wishlist-title-field'); 
    }, 
    ... 
    ... 

    init: function() { 
    this.initReferences(); 
    ... 
    ... 

그리고 당신의 Ajax 호출이 돌아 오면 그냥 다시 initReferences를 호출해야합니다.

+0

답장을 보내 주셔서 감사합니다. @epascarello,하지만 어떻게 새 요소를 가리 키도록 참조를 다시 하시겠습니까? 이것은 내가 잃어버린 곳입니다 ... 내 코드에서 init()에서 모든 선택자를 다시 작성합니까? 그리고 난 대리인 BTW를 사용하고있어 ... 그래서 일반적으로 새로운 요소를 타겟팅 문제가 안된다 – Shaoz

+0

귀하의 의견에 따라 편집 된 응답. – epascarello

+0

고맙습니다. @epascarello, 이제 시도해 보겠습니다. – Shaoz

1

DOM을 준비한 후 DOM에 사용할 수없는 데이터/클래스/ID를 삽입하면 라이브 또는 위임을 사용하여 새로운 데이터 액세스 권한을 얻게됩니다. 새 데이터가 DOM을 준비 후로드는 새로 피할 수 방법을 돌 것이다 대리자를 사용하는 것이 가장

http://api.jquery.com/delegate/

는/페이지를 다시로드합니다.

+0

하지만 위임을 사용하고 있는데, 내 코드에서'init()'함수를 체크 ... – Shaoz

관련 문제