Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.08.2014, 18:14
Новичок на форуме
Отправить личное сообщение для Grigor.918 Посмотреть профиль Найти все сообщения от Grigor.918
 
Регистрация: 05.08.2014
Сообщений: 5

onfocus & onblur
здравствуйте,я новичок нужна помощ...
я пишу крестики нолики на js, установил onfocus и onblur на элемент div,после фокуса на него появляются 2 блока с картинкой X и O,при клике на одного из них div получает картику,но когда я ставлю onblur на этот div для скрытия двух блоков картинок,почему то перестайт действовать функция для смены картинки div-а...
заранее спасибо за помощь



<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="style/style.css" type="text/css" rel="stylesheet">
<!-- <meta http-equiv="refresh" content="1"> -->
<title>X & O</title>

</head>

<body> <!-- onclick="assign(this)" -->

<ul>
<li>
<div tabindex="">
<img />
<p>
<button><img src="images/x.png"></button>
<button><img src="images/o.png"></button>
</p>
</div>

<div tabindex="">
<img />
<p>
<button><img src="images/x.png"></button>
<button><img src="images/o.png"></button>
</p>
</div>

<div tabindex="">
<img />
<p>
<button><img src="images/x.png"></button>
<button><img src="images/o.png"></button>
</p>
</div>
</li>

</ul>

<script type="text/javascript" src="script/script.js"></script>
</body>
</html>


var field=document.getElementsByTagName("div");
for(var i=0;i<field.length;i++){
	
	field[i].onfocus=function(){
	var x_o = this.getElementsByTagName("button");
	for (var j = 0; j < x_o.length; j++) {
		x_o[j].style.display = "block";	
		x_o[j].onclick=function(){
			var image = this.getElementsByTagName("img")[0].src;
			this.parentNode.parentNode.getElementsByTagName("img")[0].src = image;
			this.parentNode.style.display="none";
		}
	}	
	}
	field[i].onblur=function(){
	var x_o = this.getElementsByTagName("button");
	for (var j = 0; j < x_o.length; j++) {
			x_o[j].style.display = "none";
	}
	};
	
};
Ответить с цитированием
  #2 (permalink)  
Старый 06.08.2014, 00:21
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

Grigor.918, у дива нет фокуса
Ответить с цитированием
  #3 (permalink)  
Старый 06.08.2014, 00:42
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

Grigor.918,
как уже сказали, у элемента div нет фокуса, но его можно имитировать. Отслеживаешь на какой элемент был онклик, записываешь данные этого элемента в переменную(onfoc, например) и выполняешь соответствующую функцию.
Потом проверяешь другие клики, если кликнули на тот же самый элемент, то ничего не делаешь, а если на новый, то выполняешь свой онблюр на элементе записанном в onfoc, перезаписываешь туда новый элемент и выполняешь на нём соответствующую функцию для онфокус.
Ответить с цитированием
  #4 (permalink)  
Старый 06.08.2014, 09:03
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Rise,
Safort,
Если нефокусябельному элементу проставить tabindex = 0, то элемент будет будет фокусится при клике, если tabindex > 0, то еще и с клавиатуры. Ваш КО.
Ответить с цитированием
  #5 (permalink)  
Старый 06.08.2014, 12:14
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

WorM32,
о, годный совет.
Ответить с цитированием
  #6 (permalink)  
Старый 06.08.2014, 13:26
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

Сообщение от Grigor.918 Посмотреть сообщение
но когда я ставлю onblur на этот div для скрытия двух блоков картинок,почему то перестайт действовать функция для смены картинки
Потому что при клике по картинке происходит onblur и до смены картинок дело не доходит, выполняется onblur.
Ответить с цитированием
  #7 (permalink)  
Старый 06.08.2014, 13:27
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

WorM32, спасибо кэп
Ответить с цитированием
  #8 (permalink)  
Старый 06.08.2014, 13:41
Новичок на форуме
Отправить личное сообщение для Grigor.918 Посмотреть профиль Найти все сообщения от Grigor.918
 
Регистрация: 05.08.2014
Сообщений: 5

Сообщение от Rise Посмотреть сообщение
Потому что при клике по картинке происходит onblur и до смены картинок дело не доходит, выполняется onblur.
Rise спасибо за советы,но я понимаю тот факт что во время клика дело не доходит до функции смены,вопрос в том можно ли с помощю setTimeout задержать onblur для див????????????,тоесть пусть функия смены работает а после несколько секунд выполнится и onblur
Ответить с цитированием
  #9 (permalink)  
Старый 06.08.2014, 13:44
Новичок на форуме
Отправить личное сообщение для Grigor.918 Посмотреть профиль Найти все сообщения от Grigor.918
 
Регистрация: 05.08.2014
Сообщений: 5

Сообщение от Safort Посмотреть сообщение
Grigor.918,
как уже сказали, у элемента div нет фокуса, но его можно имитировать. Отслеживаешь на какой элемент был онклик, записываешь данные этого элемента в переменную(onfoc, например) и выполняешь соответствующую функцию.
Потом проверяешь другие клики, если кликнули на тот же самый элемент, то ничего не делаешь, а если на новый, то выполняешь свой онблюр на элементе записанном в onfoc, перезаписываешь туда новый элемент и выполняешь на нём соответствующую функцию для онфокус.
Safort что то вроде мне в голову приходило но не знал как можно реализовать,большое спасибо за совет
Ответить с цитированием
  #10 (permalink)  
Старый 06.08.2014, 14:15
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

Сообщение от Grigor.918 Посмотреть сообщение
можно ли с помощю setTimeout задержать onblur для див????????????
Ну, так можно):
field[i].onblur = function() {
    var x_o = this.getElementsByTagName("button");
    for (var j = 0; j < x_o.length; j++) {
        (function(k){
            setTimeout(function(){ x_o[k].style.display = "none" }, 100);
        })(j);
    }
};
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите по onblur и onfocus marad Элементы интерфейса 13 13.12.2013 00:49
fucus() в обработчике onblur rgl Events/DOM/Window 3 05.02.2013 16:03
Неверно работает OnBlur и, как следствие - OnFocus motoriton Firefox/Mozilla 0 10.08.2012 09:06
Chrome checkbox onfocus onblur Spice (X)HTML/CSS 0 27.10.2011 17:34
onBlur, надпись приделать megaterik Events/DOM/Window 2 28.10.2009 09:54