2009-10-22 3 views
0

HI,Как добавить скрипт для прослушивания активных событий?

Я пытаюсь прослушать события, обжаренные моим объектом ATL. Я считаю, что если я включу скрипт, как указано непосредственно в HTML-странице, он правильно подберет событие.

<html> 
<head> 
<script event="genericScriptEvent(param0, param1, param2, param3, param4, param5, param6, param7, param8)" for="CMyControl" type="text/javascript"> 
<.head> 
... 
</html> 

Однако я сейчас создаю страницу HTML динамически и просто необходимо, чтобы ввести фрагмент сценария в головной метку. Я закодировал следующий метод, ошибок нет, но он не вызывает никаких событий после того, как элемент управления находится на странице.

function loadJavascriptEventHandler(element, filePath, objectName, callbackFunction) 
{ 
    var head = element.doc.getElementsByTagName("head")[0]; 
    var tag = element.doc.createElement('script'); 
    tag.setAttribute('type', 'text/javascript'); 
    tag.setAttribute('src', filePath); 
    tag.setAttribute('for', objectName); 
    tag.setAttribute('event', callbackFunction); 
    head.appendChild(tag); 

}

Где "путь_к_файл" содержит только "genericScriptEvent (param0, param1, param2, param3, param4, param5, param6, param7, param8)"

Есть некоторая зависимость от того, когда сценарий должен существовать в цикле загрузки страницы? (объект всегда создается после добавления тега скрипта). Как еще я могу динамически добавить сценарий прослушивателя событий? Эта проблема возникает в IE7.

ответ

1

Не используйте setAttribute в документе HTML. Она имеет много ошибок в IE и, как правило, гораздо менее читабельным, чем только с помощью прямых свойства DOM Level 1 HTML:

tag.src= filePath; 

Однако, я не уверен, вставив один из странных script for элементов в IE в DOM на самом деле работает. Может быть, так оно и есть, может быть, нет, но это довольно уродливо. Будет attachEvent не лучше?

var obj= document.getElementById(objectName); 
obj.attachEvent('genericScriptEvent', function(param0, param1) { 
    ... 
}); 
0

Я не использую объекты ATL, но следующие прекрасно работает для меня с VB6/.net пользовательских элементов управления и классов:

function CMyControl::EventName() { //...Event handling code... } 

Как отметил bobince, SetAttribute в IE глючит, особенно с атрибутом «для», который ожидает вместо этого эквивалент свойства DOM, который является «htmlFor».

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