LINUX.ORG.RU

JS. Не получается установить обработчик события в объекте.

 


0

1

Не могу понять, почему onclick срабатывает после создания объекта, а не по нажатию на кнопку? Див должен быть черным(прописал в классе), после нажатия на кнопку - див становится красным... Но обработчик срабатывает после создания объекта QuestBox!

<!DOCTYPE html>
<html>
<head>
    <title>MindTest</title>
    <meta charset="UTF-8" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/flick/jquery-ui.css" />
	<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
	<style>
		.QuestDiv_class{
			background-color: black;
			position: relative;
			margin: 5% 5% 5% 5%;
			height: 100px;
			width: 20%;
			
		}
	</style>

</head>
<body>

<script type="text/javascript">
	
	var QuestBox = function() {
		var QuestDiv, Button;
		
		this.QuestDiv = document.createElement("div");
		this.QuestDiv.setAttribute("class", "QuestDiv_class");
		this.QuestDiv.parent = this;
		
		this.Button = document.createElement("button");
		this.Button.innerHTML = "PRESS ME";
		
		this.radioTap = function() {
			this.style.backgroundColor = "red";
		}
//////------------------------------------------------------------------		
		this.Button.onclick = this.radioTap.apply(this.QuestDiv);
/////-----------this.Button.onclick = window.alert("Hello world"); - работает так же после создания QuestBox, а по-сути должно по нажатию на Button. 		
		this.QuestDiv.appendChild(this.Button);
		
		document.body.appendChild(this.QuestDiv);
	};
	
	var QB = new QuestBox();
</script>
 
</body>




Последнее исправление: full_screen (всего исправлений: 1)
Ответ на: комментарий от static_lab

Потому что apply().

Если подсунуть window.alert(""); - он тоже срабатывает сразу после создания...

И да, не пиши на JS больше.

Надо JS.

full_screen
() автор топика
Ответ на: комментарий от full_screen

При чём здесь window.alert? Ты вызываешь свою ф-ию, которую хотел на клик повесить. Не подписываешься, а сразу вызываешь. Можешь обернуть apply функцией.

chkalov
()
Ответ на: комментарий от full_screen

Надо JS.

Так надо его и учить.
К тому же если уж подключен жкьюре то почему бы его не использовать? А то подключат ради одного плагина и все.

ritsufag ★★★★★
()

зачем тебе джаваскрипт?

используй jquery если не знаешь что такое DOM ready или оно тебе не нужно или не хочешь знать

anonymous
()
Ответ на: комментарий от ritsufag

Всем спасибо!

Так надо его и учить. К тому же если уж подключен жкьюре то почему бы его не использовать? А то подключат ради одного плагина и все.

Учу... понадобилось сделать пару вебаппов + сделать игру в бразере. Думал справиться своими силами (я немного умел js когда-то, щас разучился). Достал Фленагана с полки... Не зря выписывал. ЖКьюри - потом, сначала основы закрепить.

При чём здесь window.alert? Ты вызываешь свою ф-ию, которую хотел на клик повесить. Не подписываешься, а сразу вызываешь. Можешь обернуть apply функцией.

Сделал обертку - помогло:

//////------------------------------------------------------------------		
		this.Button.onclick = function() {
			this.parent.radioTap.apply(this.parent.QuestDiv);
		};
/////-------------------------------------------------------------------		

full_screen
() автор топика
Ответ на: комментарий от full_screen

всмысле не обертку, а повесил на onclick функцию, как и должно быть...

full_screen
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.