Ajax 로딩된 콘텐츠에서 이벤트를 바인드하는 방법
난 연결고리가 있어myLink
에 AJAX 로딩된 콘텐츠를 삽입합니다.div
(appended Container)를 선택합니다.문제는 이 시스템이click
jQuery로 바인드한 이벤트가 added Container에 삽입된 새로 로드된 콘텐츠에서 실행되지 않습니다.그click
이벤트는 내 AJAX 함수로 로드되지 않은 DOM 요소에 바인딩됩니다.
이벤트를 바인딩하려면 무엇을 변경해야 합니까?
내 HTML:
<a class="LoadFromAjax" href="someurl">Load Ajax</a>
<div class="appendedContainer"></div>
My JavaScript:
$(".LoadFromAjax").on("click", function(event) {
event.preventDefault();
var url = $(this).attr("href"),
appendedContainer = $(".appendedContainer");
$.ajax({
url: url,
type : 'get',
complete : function( qXHR, textStatus ) {
if (textStatus === 'success') {
var data = qXHR.responseText
appendedContainer.hide();
appendedContainer.append(data);
appendedContainer.fadeIn();
}
}
});
});
$(".mylink").on("click", function(event) { alert("new link clicked!");});
로드할 콘텐츠:
<div>some content</div>
<a class="mylink" href="otherurl">Link</a>
동적으로 생성된 요소에 대해 이벤트 위임 사용:
$(document).on("click", '.mylink', function(event) {
alert("new link clicked!");
});
이것은 실제로 동작합니다.이 예에서는 클래스와 함께 앵커에 추가했습니다..mylink
대신data
- http://jsfiddle.net/EFjzG/
.on()이 호출된 후 콘텐츠가 추가되면 로드된 콘텐츠의 부모 요소에 위임된 이벤트를 생성해야 합니다.이는 이벤트 핸들러가 .on()이 호출될 때(일반적으로 페이지 로드 시) 바인딩되기 때문입니다..on()이 호출되었을 때 요소가 존재하지 않으면 이벤트는 해당 요소에 바인딩되지 않습니다.
이벤트는 DOM을 통해 전파되기 때문에 부모 요소에 위임된 이벤트를 생성함으로써 해결할 수 있습니다(.parent-element
다음 예에서) 페이지가 로딩될 때 존재하는 것을 알 수 있습니다.방법은 다음과 같습니다.
$('.parent-element').on('click', '.mylink', function(){
alert ("new link clicked!");
})
그 주제에 대한 더 많은 읽을거리:
질문이 "ajax 로딩된 콘텐츠에서 이벤트를 바인드하는 방법"인 경우 다음과 같이 할 수 있습니다.
$("img.lazy").lazyload({
effect : "fadeIn",
event: "scrollstop",
skip_invisible : true
}).removeClass('lazy');
// lazy load to DOMNodeInserted event
$(document).bind('DOMNodeInserted', function(e) {
$("img.lazy").lazyload({
effect : "fadeIn",
event: "scrollstop",
skip_invisible : true
}).removeClass('lazy');
});
따라서 모든 Ajax 코드에 구성을 배치할 필요가 없습니다.
jQuery 1.7 현재.live()
메서드는 권장되지 않습니다.사용하다.on()
이벤트 핸들러를 접속합니다.
예 -
$( document ).on( events, selector, data, handler );
아직 솔루션을 찾고 있는 사용자에게 가장 좋은 방법은 문서 자체에 이벤트를 바인드하고 이벤트와 "on ready"를 바인드하지 않는 것입니다.다음은 예를 제시하겠습니다.
$(function ajaxform_reload() {
$(document).on("submit", ".ajax_forms", function (e) {
e.preventDefault();
var url = $(this).attr('action');
$.ajax({
type: 'post',
url: url,
data: $(this).serialize(),
success: function (data) {
// DO WHAT YOU WANT WITH THE RESPONSE
}
});
});
});
예를 들어 html 형식의 입력이 포함된 경우 다음과 같이 하십시오.
$(document).on("change", 'input[type=radio][name=fieldLoadedFromAjax]', function(event) {
if (this.value == 'Yes') {
// do something here
} else if (this.value == 'No') {
// do something else here.
} else {
console.log('The new input field from an ajax response has this value: '+ this.value);
}
});
대신 jQuery.live()를 사용합니다.설명서는 이쪽
예
$("mylink").live("click", function(event) { alert("new link clicked!");});
ASP의 경우.넷 테스트:
<script type="text/javascript">
Sys.Application.add_load(function() { ... });
</script>
이 기능은 페이지 로드 및 업데이트 패널 로드 시 작동합니다.
자세한 내용은 이쪽에서 확인하시기 바랍니다.
Ajax 콘텐츠 로드 시 이벤트 바인딩에 중요한 단계...
01. 우선 셀렉터에서 이벤트를 언바인드 또는 오프합니다.
$(".SELECTOR").off();
02. 문서 수준에서 이벤트 청취자 추가
$(document).on("EVENT", '.SELECTOR', function(event) {
console.log("Selector event occurred");
});
다음은 제가 선호하는 방법입니다.
// bind button click to function after button is AJAX loaded
$('#my_button_id').bind('click', function() {
my_function(this);
});
function my_function () {
// do stuff here on click
}
이 코드는 AJAX 콜이 완료된 직후에 설정합니다.
JS 뉴브로서 명확하지 않은 한 가지 포인트를 추가하고 싶습니다.일반적으로 다음과 같은 이벤트가 문서 내에서 전송됩니다.
$(function() {
$("#entcont_table tr td").click(function (event) {
var pk = $(this).closest("tr").children("td").first().text();
update_contracts_details(pk);
});
}
원하는 이벤트 위임 사용:
$(function() {
// other events
}
$("#entcont_table").on("click","tr td", function (event) {
var pk = $(this).closest("tr").children("td").first().text();
update_contracts_details(pk);
});
준비된 문서 내에서 이벤트 위임을 수행할 경우 다음과 같은 오류가 발생합니다.
cant assign guid on th not an boject
언급URL : https://stackoverflow.com/questions/16598213/how-to-bind-events-on-ajax-loaded-content
'programing' 카테고리의 다른 글
각도 구성 요소 외부의 클릭 감지 (0) | 2023.03.14 |
---|---|
jss 색상의 불투명도를 변경하는 방법 (0) | 2023.03.14 |
Axios에서 Ajax 요청을 취소/취소하는 방법 (0) | 2023.03.14 |
같은 도메인에서 CORS 오류가 발생합니까? (0) | 2023.03.14 |
기동 후 스프링 부트 후 모든 엔드포인트 목록을 가져오는 방법 (0) | 2023.03.14 |