2013-05-10 3 views
2

에서 javascript를 실행할 수 없으므로 javascript/jquery에 새로운 것이므로 도움이 필요합니다. 여기에 문제가 있습니다. 버튼이 jquery 애니메이션을 실행하여 로그인 양식을 표시하는 페이지가 있습니다. (그냥 이전 장소의 html을 대체합니다) 로그인 양식에서 로그인 양식을 숨기는 버튼을 동적으로 만듭니다. , 그리고 원래의 HTML을 공개. 그러나이 단추는 .click 메서드로 호출 할 수 없으며 OnClick 특성도 작동하지 않습니다. 어떤 충고? 동적으로 생성 된 HTML 버튼

$(document).ready(function() { 
$("#login_button").click(function() { 
$("#menu").animate({height: "toggle"}, 500, function() { 
$("#menu").empty(); 
$("#menu").append('<button id="back_button"></button>'); 
$("#menu").animate({height: "toggle"}, {duration: 500, queue: false}); 
}); 
}); 
}); 

다음 "back_button"을 수신하는 코드를 클릭

:

$(document).ready(function() { 
$("#back_button").click(function() { 
$("#menu").animate({height: "toggle"}, 500, function() { 
$("#menu").append(//Regular HTML); 
$("#menu").animate({height: "toggle"}, {duration: 500, queue: false}); 
}); 
}); 
}); 

자바 스크립트가 요소를 실행할 수 없습니다 내 다른 자바 스크립트를 생성? 모든 의견이 훌륭합니다! 미리 감사드립니다!

+3

검색해 보셨습니까? http://stackoverflow.com/questions/1359018/in-jquery-how-to-attach-events-to-dynamic-html-elements#answer-9331127 – thebreiflabb

+0

예, 다른 스크립트에 의해 생성 된 요소에서 실행할 수 있습니다. 먼저 이벤트를 바인딩하기 전에 먼저 해당 요소가 존재할 때까지 기다려야하거나 이벤트를 문서와 같은 요소의 상위 요소에 바인딩하여 이벤트 위임을 활용해야합니다. http://learn.jquery.com/events/event-delegation/ –

답변

10

변경에서 다시 buttom의에 대한 코드 :

$("#back_button").click(function() { 

동적 요소를 만들 때

$(document).on('click', "#back_button", function() { 

에, 당신은 jQuery의 .on() 기능을 사용해야합니다.

이벤트 처리기는 현재 선택된 요소에만 바인딩됩니다. 코드가 .on()을 호출 할 때 페이지에 이 있어야합니다. 요소가 있는지 그리고 선택할 수 있는지 확인하려면 페이지의 HTML 태그에있는 요소의 문서 준비 처리기 내에서 이벤트 바인딩을 수행하십시오. 새 HTML이 페이지에 삽입되는 경우 새 HTML이 인 페이지가 배치 된 후에 요소를 선택하고 이벤트 처리기를 연결하십시오.

+0

jQuery가 모든 이벤트에 콜백을 호출할지 여부를 결정할 필요가 없도록 요소에 더 가까운 것을 바인딩하십시오. – Brad

+0

예, 가능하면 가장 가까운 기존 요소에 바인딩하십시오. "위임 된 많은 이벤트 핸들러를 문서 트리의 상단에 붙이면 성능이 저하 될 수 있습니다. 이벤트가 발생할 때마다 jQuery는 해당 유형의 모든 첨부 된 이벤트의 모든 선택기를 이벤트 대상에서부터 맨 위까지의 경로에있는 모든 요소와 비교해야합니다 문서 ** 최상의 성능을 위해 대상 요소에 최대한 가깝게 문서 위치에 위임 된 이벤트를 첨부하십시오. ** 큰 문서에서 위임 된 이벤트에 대해 문서 나 문서를 과도하게 사용하지 마십시오. " – j08691

0

로드시 클릭 핸들러를 추가하려고했지만 <button>이 아직 작성되지 않았습니다. 버튼이 생성 된 후 버튼을 만드는 동일한 코드에 click 함수를 추가합니다.

+0

@AdamD 그게 정확히 내가 말한 것입니다. 그게 무슨 소리 죠? – Adrian

+0

어떻게 잘못 되었습니까? 이것은 문제를 해결하는 가장 좋은 방법이며 특정 상황에 따라 더 나은 성능을 발휘할 수 있습니다. – Brad

+0

실제로 그것은 맞습니다. 아마 다른 솔루션으로 갈 것입니다. 그러나 그것은 완벽하게 유효합니다. – thebreiflabb

0

당신은 이벤트 위임을 필요로하는 뒤로 가기 버튼에 대한 자바 스크립트가 실행될 때, 실제 요소가 존재하지 않기 때문에이 발생하는됩니다

$(document).on('click', '#back_button', function() { 
    // do your stuff here 
}); 

http://api.jquery.com/on/

0

.

대신 .on을 사용하여 클릭 이벤트를 바인딩하십시오.

$(document).on("click", "#back_button", function() {}); 
관련 문제