Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Миниигра "Найди карту". (https://javascript.ru/forum/events/38232-miniigra-najjdi-kartu.html)

X-man 24.05.2013 11:46

Миниигра "Найди карту".
 
Вложений: 1
Добрый день.
Делаю что-то типа игрушки "Найди карту". Выкладываю на стол 4 карты(картинки во вложении), вешаю на каждую событие, по которому вызывается функция обращения к соответствующей карте.
<style type="text/css">
img
{
	margin:30px 5px;
	cursor:pointer;
	border-radius:5px;
}
div
{
	background-color:#999;
}
</style>
<script type="text/javascript">
<!--
var cards= new Array("11.png","12.png","13.png","14.png","rub.png");
function opencard(num)
{
	var img=document.getElementsByTagName("IMG")[num];
	window.alert(num);
	img.src=cards[num];
}
window.onload=function() 
{
	var img=document.getElementsByTagName("IMG")
	for (var i=0; i<img.length;i++)
	{
		img[i].src=cards[img.length];
        img[i].onclick=opencard(i);

	}
}
//-->
</script>

<div align="center">
<img />
<img />
<img />
<img /><br>

</div>

Проблема в том что у меня карты переворачиваются не по клику а при загрузки страницы. Это связано с использованием img[i].onclick=opencard(i);. Как правильно задать события для каждой карты?

ksa 24.05.2013 15:21

Оно?

<!DOCTYPE html>
<html>
<head>
<!--
<script src="http://code.jquery.com/jquery-latest.js"></script>
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
</style>
<script type="text/javascript">
window.onload=function() {
	var o=document.getElementsByTagName("button")
	for (var i=0; i<o.length;i++)	{
        o[i].onclick=(function (N) {
			return function (){alert(N);}
		})(i);
	};
};
</script>
</head>
<body>
<button>0</button>
<button>1</button>
<button>2</button>
</body>
</html>

cyber 24.05.2013 16:46

ksa, wtf?
про http://learn.javascript.ru/bubbling-and-capturing не слышал?

X-man,
не смог спокойно смотреть на код ТС ...
http://learn.javascript.ru/play/XHLNic

ksa 24.05.2013 16:50

Цитата:

Сообщение от cyber
ksa, wtf?
про http://learn.javascript.ru/bubbling-and-capturing не слышал?

Дальше что? :D

cyber 24.05.2013 16:59

ksa, нечего, просто показал косяк, если хочешь можешь по танцевать )

X-man 24.05.2013 17:01

ksa, спасибо! Работает.

cyber 24.05.2013 17:03

ksa, ладно ты победил, ТС за кривой код)

X-man 24.05.2013 17:09

cyber, спс за способ и за инфу!
Первый раз на js пишу.

X-man 25.05.2013 13:23

Цитата:

Сообщение от cyber (Сообщение 252561)

cyber, '!function' равнозначно window.onload=function()?
И подскажи плз, почему работает только если div container идет перед скриптом в body, а при другом расположении(если перенести скрипт в head или поменять местами с div) грузится пустая страница?

Aetae 25.05.2013 13:39

X-man, потому что скрип выполняется сразу, как загружен. И если див ниже кода, то на момент выполнения его какбэ ещё нет.
Как раз для таких случаев исползуется "window.onload=function(){" (окно.когдаЗагрузится - запустить функицю).

!function - извращённый способ запустить функцию сразу после создания.


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