2013-03-29 3 views
0

나는 예를 들어이 들어있는

$newElement = jQuery('<div />'); 
$first.replaceWith($newElement); 

을하지만 난에 대한 콜백을 유지하려면 두 번째 요소의 첫 번째 요소 ...

그럴 수 있습니까?

EDIT 1

는 이미 .on() 또는 .delegate()으로 작업을 수행하는 방법을 알고있다. 이것은 내 시나리오입니다.

선택기를 변경 한 후에는로드해야하지만 선택기의 내용은 로그인 한 사용자의 역할에 따라 다릅니다. 이미 localstorage에 저장된 정보가 있습니다. <select> 요소를 생성 기능

window.Core.setBranchesSelector($('#theElementInWhichTheSelectorWillBe')); 

: 그 선택의 콘텐츠를 통해로드된다. 그 페이지에 대한 js 내에서 만들 수 있습니다

$('#parent').on('click', '#theElementInWhichTheSelectorWillBe', function() {}); 

하지만 내가 somethink 같이 할 경우, 따라서 가능한 한 유연하게 그 기능을 확인하고 싶었 :

$elementToBeReplaced = $('<coolElement />').click(function() {}); 
/* Something really cool with that element */ 
Core.setBranchesSelector($elementToBeReplaced); 

가 선택기가에 대한 콜백을 상속 click 이벤트 ...

+3

이벤트 위임을 사용하고 시나리오를 피하는 것이 좋습니다. – Nelson

+0

.on() 또는 .delegate()를 사용하여 작업하는 방법을 이미 알고 있지만 그 방법으로 작업하고 싶었습니다. 어쨌든 제안 해 주셔서 감사합니다. – Cito

답변

2

질문에 대한 일반 대답은 : 아니, 당신이 그것을 할 수 없습니다 당신이 그렇게되면, 그것은 쉽게합니다. 적어도 새로운 버전의 jQuery에서는 1.7에 당신이 그것을 할 수있다. @undefined는 이미 주석 # 15708467에 주석을 달아 놓았다.

http://jsfiddle.net/8dCQT/

$(function() { 
    $("#parent").on("click", ".child", function() { 
     alert($(this).text()); 
    }); 
    $("input").click(function() { 
     $(".child").remove(); 
     $("#parent").append("<div class='child'>I'm a replacement</div>"); 
    }); 
}); 

당신은 대체 DIV를 클릭 버튼을 클릭 한 후 알 수 있습니다 텍스트와 같은 클릭 기능과 경고를 호출

그러나, 여기 .on()와 위임을 사용하여 간단한 예제이다 새로운 부서의

참고 : 여기에서 중요한 부분은 동일한 선택기 (이 경우 .child)을 원본으로 선택할 수 있다는 것입니다. 나는 여기서 수업을 사용 했었지만 부모의 첫 아이를 사용하거나 그 밖의 다른 것들을 사용할 수있었습니다.

참고 : 직계 부모에게 바인딩 할 필요도 없으며 상단의 모든 부분을 document으로 바인딩 할 수 있지만 코드 속도가 느려 지므로 권장하지 않습니다. 가능한 한 이벤트를 첨부하려는 요소 가까이에 코드를 바인딩해야 코드가 DOM 트리에서 너무 멀리 떨어져 있지 않아도됩니다.

+0

나는 이것이 어떻게 작동 할 것인지를 설명하는 해답 원인으로 선택했다. 또한, 내 질문에 대한 실제 답변을 추가했습니다. 아니, 할 수 없습니다. 모두에게 감사 드려요 :) – Cito

1

jQuery는 이미 바인딩 된 이벤트에 직접 액세스하는 API를 제공하지 않습니다.

이벤트를 부모 요소에 배치하고 자식 요소를 바꾸고 이벤트 버블 링을 사용하여 이벤트를 잡습니다.

+0

+1 이벤트 위임이 의미하는 바입니다. – Nelson

+0

그건 사실이 아니야,'data ('events')'. – undefined

+0

@undefined 그래서 콜백을 받아서 다른 콜백에 할당 할 수 있습니까? – Cito

1

각 요소에 동일한 ID를 포함 시키거나 각 div에 공통 클래스를 제공해야합니다.

$(document).on('click','.some-common-class',function(){ 
}); 
+1

그런 문서에 절대로 바인딩해서는 안됩니다. 코드 관리가 어렵고 궁극적으로 성능이 저하됩니다. –

+0

@JosephLennox - 동의 하겠지만 문서의 구조를 알지 못한다 ... 이것은 가장 좋은 대안이다. ($ ('. some-common-class')의 직접적인 번역.). –