여러 window.onload 이벤트 추가
-
08-06-2019 - |
문제
내 ASP.NET 사용자 컨트롤에서 일부 JavaScript를 window.onload
이벤트:
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), onloadScriptName))
Page.ClientScript.RegisterStartupScript(this.GetType(), onloadScriptName,
"window.onload = function() {myFunction();};", true);
내 문제는 이미 뭔가가 있다면 onload
이벤트를 덮어씁니다.두 개의 사용자 컨트롤이 각각 JavaScript를 실행하도록 허용하려면 어떻게 해야 합니까? onload
이벤트?
편집하다: 타사 라이브러리에 대한 정보를 제공해 주셔서 감사합니다.나는 그들을 명심할 것이다.
해결책
제안된 대부분의 "솔루션"은 Microsoft 전용이거나 비대한 라이브러리가 필요합니다.여기 좋은 방법이 하나 있습니다.이는 W3C 호환 브라우저 및 Microsoft IE에서 작동합니다.
if (window.addEventListener) // W3C standard
{
window.addEventListener('load', myFunction, false); // NB **not** 'onload'
}
else if (window.attachEvent) // Microsoft
{
window.attachEvent('onload', myFunction);
}
다른 팁
여전히 추악한 솔루션이 있습니다(프레임워크를 사용하는 것보다 훨씬 열등하거나 addEventListener
/attachEvent
) 즉, 현재를 저장하는 것입니다. onload
이벤트:
function addOnLoad(fn)
{
var old = window.onload;
window.onload = function()
{
old();
fn();
};
}
addOnLoad(function()
{
// your code here
});
addOnLoad(function()
{
// your code here
});
addOnLoad(function()
{
// your code here
});
jQuery와 같은 프레임워크는 페이지가 로드될 때가 아니라 DOM이 준비되었을 때 코드를 실행하는 방법을 제공합니다.
DOM이 준비되었다는 것은 HTML이 로드되었지만 이미지나 스타일시트와 같은 외부 구성요소가 로드되지 않았음을 의미하므로 로드 이벤트가 발생하기 훨씬 전에 호출할 수 있습니다.
오늘도 비슷한 문제가 있어서 해결했어요 index.js
다음과 함께:
window.onloadFuncs = [];
window.onload = function()
{
for(var i in this.onloadFuncs)
{
this.onloadFuncs[i]();
}
}
onload 이벤트를 첨부하려는 추가 js 파일에서 다음을 수행하면 됩니다.
window.onloadFuncs.push(function(){
// code here
});
나는 일반적으로 jQuery를 사용하지만 이번에는 한동안 마음을 써야 하는 순수한 js로 제한되었습니다!
무툴즈 매우 사용하기 쉽고 RedWolves가 말했듯이 또 다른 훌륭한 JavaScript 프레임워크입니다. jQuery 원하는 만큼 핸들러를 계속해서 처리할 수 있습니다.
내가 포함하는 모든 *.js 파일에 대해 코드를 함수로 래핑하기만 하면 됩니다.
window.addEvent('domready', function(){
alert('Just put all your code here');
});
그리고 또한 있다 onload 대신 domready를 사용하는 것의 장점
이 시도:
window.attachEvent("onload", myOtherFunctionToCall);
function myOtherFunctionToCall() {
// do something
}
편집하다:안녕하세요, 저는 방금 Firefox로 로그인하고 직접 다시 포맷할 준비를 하고 있었습니다!여전히 IE7에서는 코드 형식을 지정하지 않는 것 같습니다.
저는 ASP.NET에 대해 잘 모르지만 onload 이벤트에 대해 두 함수를 모두 호출하는 사용자 지정 함수를 작성해 보는 것은 어떨까요?두 개의 함수가 있는 경우 이벤트에 등록한 세 번째 스크립트에서 두 함수를 모두 호출하세요.
다음과 같은 것을 사용하는 것을 고려해 보셨나요? 제이쿼리 여러 이벤트 핸들러를 추가하여 정리하기 위한 프레임워크를 제공하는 것은 무엇입니까?
실제로 따르면 이 MSDN 페이지, 꼭 당신 같군요 ~할 수 있다 여러 스크립트를 등록하려면 이 함수를 여러 번 호출하세요.다른 키(두 번째 인수)를 사용해야 합니다.
Page.ClientScript.RegisterStartupScript(
this.GetType(), key1, function1, true);
Page.ClientScript.RegisterStartupScript(
this.GetType(), key2, function2, true);
나는 그것이 효과가 있다고 믿습니다.
jquery로 할 수 있어요
$(window).load(function () {
// jQuery functions to initialize after the page has loaded.
});