2009-10-20 2 views
0

У меня есть страница asp.net, загружающая некоторые скрипты javascript. Один из этих сценариев загружает некоторые элементы управления на страницу, добавляя их к телу в событии window.onload.Javascript после окна. Загрузка?

Мне нужно ввести скрипт по коду, чтобы вызвать метод скриптов, который зависит от элементов управления, созданных в окне window.onload. Это не работает, потому что каждый звонок, который я делаю, всегда на ранней стадии, и элементы управления не создаются на данный момент. Если я вызываю его, например, onclick в гиперссылке, это работает, потому что элементы управления уже были созданы в onload.

Итак: 1 - <script type="text/javascript" src="/Scripts/somefile.js"></script>

2 - addEvent(window, "load", blabla); - в JS выше готовит некоторые элементы управления должны быть приложены к телу на OnLoad событие

3 - В коде позади я пытаюсь написать скрипт на страницу this.Page.ClientScript.RegisterStartupScript или this.Page.ClientScript.RegisterClientScriptBlock или любым другим способом, который должен вызывать метод на .js выше, который зависит от элемента управления, загруженного в событие onload. Этот шаг не выполняется, потому что элемент управления еще не включен в DOM.

Любое предложение о том, как сделать звонок после события window.onload?

ответ

1

Если вы можете использовать JQuery

, то вы можете вызвать скрипт после загрузки DOM завершена.

$(document).ready() 

Introducing $(document).ready()

+0

Нет, не могу. Я имею в виду, я мог бы, но по некоторым причинам, не интересным этому пространству, мне нужно придерживаться простого javascript, никаких библиотек. Но tks для предложения. – Dante

+0

Ухаживать за голосом? – rahul

1

Вы можете зарегистрировать файл JS, как вы зарегистрируетесь сценарий запуска:

this.Page.ClientScript.RegisterClientScriptInclude("scriptKey", "/Scripts/somefile.js"); 
3

создать массив функций:

<script> 
    var onLoadFunctions = []; 

    function addOnLoad(funcName) { 
    onLoadFunctions[onLoadFunctions.length] = funcName; 
    } 

    function executeOnLoad() { 
    for (var i=0; i<onLoadFunctions.length; i++) onLoadFunctions[i](); 
    } 

    addOnLoad(foobar); 
    addOnLoad(blabla); 
    addOnLoad(theother); 

    window.onload = executeOnLoad; 
</script> 
1

Использование Prototype JavaScript, вы можете имеют сценарии, когда DOM готов (see the API here):

document.observe("dom:loaded", function() { 
    alert('The DOM is ready.'); 
}); 

Я рекомендовал бы переместить скрипт, который загружает в onload случае к dom:loaded событию.

1

Вместо window.onload, вы можете использовать document.onreadystatechange событие для этого ,, ниже образца сниппета ..

document.onreadystatechange=onReady; 
    function onReady() { 
     if (document.readyState=="complete") { 
     alert('The document ready state is "complete"') 
     } 
+0

Обратите внимание, что onreadystatechange является расширением Microsoft. Это не поддерживается Mozilla (движок за Firefox). https://developer.mozilla.org/en/DOM/document.onreadystatechange –

+0

@jan, да, его право ... OP mentioed ASP.net .. так что я просто, хотя IE уместен .. :) – RameshVel

0

Я попробовал несколько подходов, но безуспешно. Я просто изменил бизнес-требование, и скрипт уволен действием пользователя, в отличие от сценария, введенного через код позади.

Но для кого-то, кто ищет ответ, существует несколько возможных кандидатов, которые могут решить проблему в вашем случае.

Смежные вопросы