그럼 ... 댓글을 달았다면 모든 것이 바뀝니다.
어떤 자바 스크립트도이 실행될 때 자동으로 표시되지 않도록 설정할 수 있습니다. 그러나 사용자 정의 이벤트를 사용하여 .trigger()
및 .bind()
을 사용하여 jquery 사용자 정의 이벤트를 활용할 수 있습니다.
$("#Something").click(function() {
$('body').trigger('Custom.BeginWork');
setTimeout(function() { DoWorkFunction(/* you can pass params here if you need */); }, 0);
// Causes it to be executed in the background 0ms from now
});
function DoWorkFunction() {
// Stuff...
$('body').trigger('Custom.EndWork');
}
그런 다음 많은 .ajaxStart()
및 .ajaxStop()
$('#Working').bind('Custom.StartWork', function() {
$(this).show();
});
$('#Working').bind('Custom.EndWork', function() {
$(this).hide();
});
같은
.bind()
이벤트를 등록 :
function myFunctionThatDoesSomething() {
$('body').trigger('Custom.BeginWork');
// Do Something ...
$('body').trigger('Custom.EndWork');
}
비록 장기 실행 작업은 아마 그래서 그들은 이벤트에서 차단되지 않는 비동기을 수행해야합니다
여기에 working jsFiddle Example입니다.
업데이트 : 당신은 이중 setTimeout
을했습니다 your jsFiddle에서
. 다음은이가 번역 무엇
setTimeout(function() {
// Call Operation Here
try { setTimeout(function() { LongRunningOperation(10000); }, 1000);
}
finally
{
$("body").trigger('Custom.End');
}
}, 50); // 50ms delay because some browsers *cough*IE*cough* are slow at rendering dom changes
은 다음과 같습니다
는 그래서
Custom.End
이벤트가 완료하지 않을 경우, 실행
일정 장기 실행 기능 후 해고된다.
setTimeout
은
비동기이며 비 블로킹입니다.
'@ (...). show()'와'$ (...). hide()'는 가시성을위한 jquery 메소드입니다. – Aren
@Aren은 캐치를 가져 주셔서 감사합니다. 왜 내가 이렇게하고 있는지 알지 못합니다. – 1252748
@thomas jQuery show 및 hide 메서드는 요소의 "display"특성을 "none"또는 "block"(또는 "none"이전의 모든 요소)으로 설정합니다. 이는 가시성 속성을 설정하는 여기에서하는 작업과 조금 다릅니다. 이 차이가 발생하는 한 번은 표시하지 않고 이미지의 크기를 가져오고 싶을 때 디스플레이가 "none"으로 설정된 경우 작동하지 않는 경우입니다. –