2013-07-26 4 views
2

$(document).ready();을 사용하면 dom이 준비된 후에 실행할 수 있지만 여전히 실행됩니다.청취자 앞의 jQuery 트리거

같은 방식으로 동작하도록 사용자 정의 트리거를 얻으려면 어떻게해야합니까? 페이지 (myEvent가 전에)로드, 나는 게으른 부하 스크립트, 일부 Ajax를 할 수도 있고, 아약스 (아마도 myEvent가 후 지금) 완료되면, 나는를 배치 것

$(document).trigger("myEvent"); 

즉 아약스 콜백 리스너 (.ready()) 당신이 $ (문서로 할 수있는 것처럼)

$(document).on("myEvent", function(){ ... }); 

을 제가 진행하기 전에 무슨 일이 있었로 확인 myEvent가 만들려면하지만 분명이 그것이 전에 트리거 때문에 발생하지 않습니다 청취자가 있었다.

+1

'.when()'과 같은 것이 필요합니까? http : //api.jquery.com/jQuery.when/ –

+0

나는 당신이 찾고있는 것을 이해하는지 모르겠다. 곧 이벤트를 트리거하려고한다. 이벤트가 바운드되었거나 전에? 그것이 전에라면, 나에게 실제로 의미가 없습니다. 당신의 행사를 어떻게해야하는지 우리에게 말해 줄 수 있습니까? BTW, readyList 지연된 개체를 사용하여 준비된 '의사'이벤트에 대해 jQuery 소스에서 수행하는 방법을 확인할 수 있습니다. –

+0

@ Cԃ ա De 지연 사용은 의미가 있습니다. – Fergal

답변

0

트리거 이벤트 전에 바인딩 된 것은 효과가 없습니다.

일부 처리기가 연결된 후에 만 ​​트리거해야합니다. 그렇지 않으면 아무 것도 실행되지 않습니다. ready 이벤트와 관련하여 jQuery는 지연 객체 인 'readyList'객체를 사용합니다. 하지만 당신이 찾고있는 것보다 큽니다. 어쨌든 이것은 다른 이벤트, DOMContentLoaded 또는 onreadystatechange 또는 window 객체의 onload에 따라 계속 발생하거나 이러한 이벤트가 이미 완료된 경우 시간 초과를 사용하여 수동으로 해결됩니다. 어떤 이유로 당신이 원하는 경우 obscur 이유로, 특정 케이스에 발사하고 당신이 AJAX 콜백 메소드를 수정할 수 없습니다

$(document).on("myEvent", function(){ /**/ }).trigger('myEvent'); 

: 당신이 그것을 바인딩 일단

는 왜, 고전적인 방법으로 이벤트를 트리거하지 당신은 여전히 ​​ajaxStop() 핸들러를 사용할 수있는 몇 가지 조건에 대해 그런 일을 확인하십시오 당신이 일을 사용하려면

$(document).ajaxStop(function() { 
    if ($._data(document, 'events').myEvent) { 
     $(this).trigger('myEvent').off('ajaxStop'); //off() could be removed, depending your needs 
    } 
}); 

DEMO

전자 약속 인터페이스는, 당신의 아약스 메소드에 의해 반환되는 그런 일 사용

$.when($.get('myajax')).done(function(){$(document).trigger('myEvent')}); 

을하지만 실제로, 당신은 아마 당신의 논리가 다른 곳에서 실패 찾고있는 충분한 것을 알려하지 않고 더 나은 방법이 있어야한다 가능한 IMO.