Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   не получается присоединить функцию (https://javascript.ru/forum/events/8763-ne-poluchaetsya-prisoedinit-funkciyu.html)

Namolem 11.04.2010 20:54

не получается присоединить функцию
 
function getProtocol(){	
    код функции
}
document.getElementById("d_s_m_menu").innerHTML +=  "<a id=\"protocolOfChanges\" href=\"#\">Протокол изменений</a><br/>";
document.getElementById("protocolOfChanges").addEventListener('click', getProtocol, false);


при нажатии на ссылку ничего не происходит
если написать вызов функции ниже этого кода, она выполняется

Aetae 11.04.2010 21:50

Подозреваю, что вы юзаете для проверки ie.
http://javascript.ru/tutorial/events...cialnye-metody

Namolem 11.04.2010 22:12

Цитата:

Сообщение от Aetae (Сообщение 51203)
Подозреваю, что вы юзаете для проверки ie.
http://javascript.ru/tutorial/events...cialnye-metody

нет, это скрипт для GreaseMonkey в Firefox

Aetae 11.04.2010 22:15

Тогда всё работает.)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<body>
		<div id='d_s_m_menu'></div>
		<script type="text/javascript">
		function getProtocol(){alert(1);}
		document.getElementById("d_s_m_menu").innerHTML +=  '<a id="protocolOfChanges" href="#">Протокол изменений</a><br/>';
		document.getElementById("protocolOfChanges").addEventListener('click', getProtocol, false);
		</script>
	</body>
</html>

Namolem 11.04.2010 22:40

вспомнил о таком методе дебага как комментирование всего и постепенное открытие

Ошибку сабжа вызывает эта строчка. Почему?

document.getElementById("d_s_m_menu").innerHTML +=  "<a href=\"https://de.ifmo.ru/servlet/distributedCDE?Rule=eRegister\">Электронный журнал</a><br/>";

Aetae 11.04.2010 22:48

Если сама ссылка появляется то хзхз.
Если же нет, то например d_s_m_menu ещё не появился на странице или innerHTML изначально пустое...

P.S. То что в последнем примере в ссылке не прописан нужный id - это опечатка?)

B~Vladi 11.04.2010 22:50

Больше никаких методов дебага не знаешь? document.getElementById("d_s_m_menu") нашелся? И вообще, текст ошибки можно было бы и выложить.

Namolem 11.04.2010 23:05

больше ничего не могу придумать

Firebug и Firefox молчат - никаких ошибок.

ссылка, вызывающая ошибку появляется

вот полный код

http://pastebin.ru/311775

Namolem 11.04.2010 23:06

Цитата:

Сообщение от Aetae (Сообщение 51217)
P.S. То что в последнем примере в ссылке не прописан нужный id - это опечатка?)

для ссылки? я ее больше нигде не использую, поэтому не нужен

Aetae 11.04.2010 23:37

Перенос строки или это просто особенности вывода?(ну а вдруг=) )

Namolem 12.04.2010 00:26

Цитата:

Сообщение от Aetae (Сообщение 51234)
Перенос строки или это просто особенности вывода?(ну а вдруг=) )

особенности вывода

Aetae 12.04.2010 00:43

Вообще innerHTML+= - моветон. Страница каждый раз перерисовывается. Забивайте всё, что надо добавить, в переменную, а уже её добавляйте в innerHTML. А ещё лучше - используйте appendChild() .

Это не решение проблемы - это оптимизация, но возможно в процессе оптимизации проблема отпадёт.))

x-yuri 12.04.2010 05:25

Цитата:

Сообщение от Namolem
Ошибку сабжа вызывает эта строчка. Почему?

Цитата:

Сообщение от Namolem
Firebug и Firefox молчат - никаких ошибок.

это как?

Namolem 12.04.2010 09:18

Цитата:

Сообщение от x-yuri (Сообщение 51264)
это как?

Цитата:

Сообщение от Namolem (Сообщение 51187)
при нажатии на ссылку ничего не происходит
если написать вызов функции ниже этого кода, она выполняется

/ /

Goldf 13.04.2010 10:14

Зашел на сайт http://de.ifmo.ru/
в консоли ввел document.getElementById("d_s_m_menu")
результат null
:blink:

Namolem 13.04.2010 12:12

это меню есть только в приватной части сайта, регистрация невозможна(

Goldf 14.04.2010 10:20

так работает:
var dv = document.createElement('div');
dv.id = "d_s_m_menu";
document.body.appendChild( dv );

document.getElementById("d_s_m_menu").innerHTML +=  "<a href=\"https://de.ifmo.ru/servlet/distributedCDE?Rule=eRegister\">Электронный журнал</a><br/>";
document.getElementById("d_s_m_menu").innerHTML +=  "<a id=\"protocolOfChanges\" href=\"#\">Протокол изменений</a><br/>";
document.getElementById("protocolOfChanges").addEventListener('click',getProtocol, false);

И все нормально вызывается.
А "d_s_m_menu" это что за элемент?

Namolem 14.04.2010 18:46

Цитата:

Сообщение от Goldf (Сообщение 51559)
А "d_s_m_menu" это что за элемент?

td


Часовой пояс GMT +3, время: 02:36.