2009-02-27 2 views
1

Я пересматриваю страницу, использующую <body onload="myJS();"> для пользовательского контроля. Я понимаю, что могу это сделать, используя регистрацию на стороне сервера при загрузке.Замена body.onload в пользовательском элементе управления

Если я хочу сделать это на стороне клиента (ascx), как бы я это сделал?

ответ

2

Взятые из http://snipplr.com/view/3116/cross-browser-add-event-listener/

// Cross-browser implementation of element.addEventListener() 

function addEvent(evnt, elem, func) { 
    if (elem.addEventListener) // W3C DOM 
     elem.addEventListener(evnt,func,false); 
    else if (elem.attachEvent) { // IE DOM 
     var r = elem.attachEvent("on"+evnt, func); 

    return r; 
} 

Используйте это так: addEvent(window, your_onload_handler). Или вы можете просто использовать jquery для этого и многое другое.

+0

Не могли бы вы подробнее продумать? Где мы помещаем вызов 'addEvent (window, your_onload_handler)'? С 'your_onload_handler' вы имеете в виду функцию, которую мы хотим вызвать, когда пользовательский элемент управления загружен? Метод 'addEvent' имеет три параметра: как вы проходите только два? –

2

Подход на стороне клиента Romme является лучшим. Но только в случае, если кто-то хотел бы знать, как сделать это с помощью кода на стороне сервера в файле ASCX, придерживайтесь это в верхней части шаблона:

<script runat="server"> 

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    string strScript = "myJS();"; 
    Page.ClientScript.RegisterStartupScript(this.GetType(), "OnLoadScript_" + this.ClientID, strScript, true); 
} 

</script> 
1

OnLoad, как правило, плохой способ инициализации JS , поскольку он запускается только после завершения загрузки всех ресурсов (включая любые изображения на странице).

Самый простой и самый надежный способ вызова Javascript, что вы хотите выполнить, когда страница заканчивается загрузка положить инлайн <script> блок в нижней части HTML, прямо перед закрывающим </body> тег:

<body> 
    ... your page here ... 
    <script>myJS();</script> 
</body> 
</html> 
+0

Можете ли вы объяснить, почему это плохо для init JS после того, как все ресурсы закончили загрузку? – DotnetDude

+0

Обычно вы хотите отложить инициализацию JS до загрузки страницы, поскольку вам может потребоваться использовать DOM страницы. Ресурсы, подобные изображениям, скорее всего, не требуются для правильной инициализации JS, но если вы их дожидаетесь, для начала инициализации потребуется больше времени, что сделает страницу более медленной. – levik

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