Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы с onclick (https://javascript.ru/forum/misc/38411-problemy-s-onclick.html)

Nexus 31.05.2013 03:32

Проблемы с onclick
 
Здравствуйте, ответьте, пожалуйста, на вопрос.
Почему не работает onclick?

html страницы:
<!DOCTYPE html>
<html>
<head>
<title>Onclick</title>
</head>
<body>

</body>
</html>


js-код, который будет воспроизводить GreaseMonkey:

document.getElementsByTagName('body')[0].innerHTML='<div></div>';
document.getElementsByTagName('body')[0].getElementsByTagName('div')[0].innerHTML='<div></div>';
document.getElementsByTagName('body')[0].getElementsByTagName('div')[0].getElementsByTagName('div')[0].innerHTML='<a>Click</a>';
document.getElementsByTagName('body')[0].getElementsByTagName('div')[0].getElementsByTagName('div')[0].getElementsByTagName('a')[0].onclick=function() {document.getElementsByTagName('a')[0].innerHTML+='!';}


Заранее спасибо.

Aetae 31.05.2013 03:55

В GreaseMonkey запрещено добавление обработчика через свойство
x.onclick = function(){}
. Вместо этого нужно использовать
x.addEventListener('click', function(){}, false)


P.S.
document.getElementsByTagName('body')[0].innerHTML='<div><div><a>Click</a></div></div>';

Nexus 31.05.2013 12:26

Цитата:

Сообщение от Aetae (Сообщение 253738)
В GreaseMonkey запрещено добавление обработчика через свойство
x.onclick = function(){}

Однако этот код работает:
document.getElementsByClassName('main')[0].innerHTML+='<div class="line"></div><div id="script_foot"><a href="javascript://">Настройки</a></div>';
document.getElementById('script_foot').getElementsByTagName('a')[0].onclick=function(){script_option();window.scrollTo(0,0);}


Цитата:

Сообщение от Aetae (Сообщение 253738)
P.S.
document.getElementsByTagName('body')[0].innerHTML='<div><div><a>Click</a></div></div>';

Приведенный мною код лучше отражает суть проблемы.

Меня больше интересует почему в одних случаях событие срабатывает, а в других нет?

Nexus 01.06.2013 19:27

Неужели ответа не будет?(

Aetae 01.06.2013 19:55

Я тебе уже ответил. Onclick и не должен работать. Почему работает во втором случае - другой вопрос.

Nexus 01.06.2013 20:24

Aetae,
addEventListener так же не работает.

Deff 01.06.2013 20:51

Nexus,
Имхо на скок помню проблемными были общения именно с тегами <a>
какая то одна из моих закладок http://softlakecity.ru/browsers/firefox/greasemonkey - может что полезно...

Nexus 01.06.2013 20:56

Deff,
менял "<a></a>" на "<z></z>", "<span></span>" и т.п., ничего не вышло, событие не происходит.

Deff 01.06.2013 21:03

Nexus,
А поясните задачу... мож иными средствами можно проще решить?

Nexus 01.06.2013 22:06

Deff, Мне нужно сделать "настройки скрипта".
На странице скриптом создается ссылка и блок:
<a href="javascript://" id="option_open">Option</a>
<div style="display:none;" class="script_block">
	<div class="script_block_head">
		<div class="script_block_head_title"></div>
		<div class="script_block_head_close">Х</div>
	</div>
	<div class="script_block_body"></div>
</div>


Клик по #option_open, должен вызвать функцию, которая заполнит .script_block и поменяет его \'display\' на \'\'.
Функция заполняет .script_block_body этим:

<div class="script_block_body">
	<div class="script_module_setting">
		<span class="script_tooltip">?</span>
		<!-- тут написано, что произвойдет при клике по одной из ссылок //-->
		<div>
			<a href="javascript://">1</a>
			<!-- 
				При клике по ссылке, значение переменной, 
				описанной в скрипте, должно измениться, 
				что изменит поведения скрипта 
			//-->
			<a href="javascript://">2</a>
			<a href="javascript://">3</a>
		</div>
	</div>
	<div class="script_module_setting"></div>
	<div class="script_module_setting"></div>
</div>


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