문제

내 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);

나는 그것이 효과가 있다고 믿습니다.

답변이 완료되었음을 알고 있지만 이 기능에 대해 알아두셨으면 합니다.

http://phrogz.net/JS/AttachEvent_js.txt

T에게 안부 인사

jquery로 할 수 있어요

$(window).load(function () {
    // jQuery functions to initialize after the page has loaded.
});
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top