Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.08.2013, 12:51
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

как определить по кому кликнули при событие blur
Мне нужно в обработчике blur-а как-то определить по какому элементу произошел клик и в результате было вызвано событие blur у текущего инпута. Подскажите, пожалуйста, как это можно узнать. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 15.08.2013, 13:13
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

1) Событие blur возникает не только из-за клика. Например при переходе TAB'ом.
2) Событие blur возникает раньше события click, поэтому, без машины времени тебе не обойтись. Как соберешь машину - приходи, поможем.

Однако целевой элемент можно узнать в событии mousedown, предшествующему событию blur и click. Но опять же, не всякому click'у предшествует mousedown...
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2013, 16:01
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

Сообщение от danik.js Посмотреть сообщение
Однако целевой элемент можно узнать в событии mousedown, предшествующему событию blur и click. Но опять же, не всякому click'у предшествует mousedown...
1) Что означает "не всякому click'у предшествует mousedown..."?
2) А mouseup тоже предшествует событию blur?
3) И во всех ли браузерах во всех ОС событие mousedown предшествует событию blur?

Последний раз редактировалось FanAizu, 16.08.2013 в 16:19.
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2013, 17:38
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от FanAizu
1) Что означает "не всякому click'у предшествует mousedown..."?
Событие click на кнопках/ссылках можно вызвать с клавиатуры нажатием Enter. Не забывайт также про touch-устройства
Сообщение от FanAizu
А mouseup тоже предшествует событию blur?
Нет. mousedown -> blur -> mouseup -> click
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2014, 20:12
Интересующийся
Отправить личное сообщение для beerdy Посмотреть профиль Найти все сообщения от beerdy
 
Регистрация: 27.02.2011
Сообщений: 14

Продолжу тему. Есть вот это:
$('#dynamicbody').on('click','.mindcomment',function(){
			var mind_data_tosrv = new Object();
			mind_data_tosrv['action'] = 'comment';

			$.ajax({
				type: "POST",
				url: "http://чччч.ru/mind",
				contentType: "application/json; charset=UTF-8",
				data: JSON.stringify(mind_data_tosrv),
				success: function(data){

				}
			});

		});

		var focus = false;

		$('#dynamicbody').on('blur','.mindcommentarrea',function(event) {
			alert(event.target);
			if(focus){
				var id = ($(this).attr('id')).substring(2);
				$('#mc'+id).css("display","none");
				
				$(this).css({"height":"15px","width":"290px"});
				focus = false;
				
			}
		}).on('focus','.mindcommentarrea',function() {
			if(!focus){
				var id = ($(this).attr('id')).substring(2);
				$('#mc'+id).css("display","block");
				
				$(this).css({"height":"120px","width":"340px"});
				focus = true;
				
			}
		});

т.е. при клике на текстареа она увеличивается и появляется кнопка.

Потом. Нужно сделать так чтобы при клике на эту кнопку, текстареа не сворачивалась по blur а отрабатывала событие кнопки вперед.

Может быть можно как то
1) перехватить событие blur
2) сохранить его в "переменную" (или куда еще)
3) отработать клик
4) возобновить событие blur
???
Ответить с цитированием
  #6 (permalink)  
Старый 24.07.2014, 22:43
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

beerdy, учись студент
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>

<div id="dynamicbody">
	<textarea id="ma1" class="mindcommentarrea" style="width:290px;height:15px;"></textarea><br>
	<button id="mc1" class="mindcomment" style="display:none;">Кнопка</button><br>
	<textarea id="ma2" class="mindcommentarrea" style="width:290px;height:15px;"></textarea><br>
	<button type="button" id="mc2" class="mindcomment" style="display:none;">Кнопка</button><br>
</div>

<script>
$('#dynamicbody').on('click focusout','.mindcomment',hrButton).on('focusin focusout','.mindcommentarrea',hrTextarea);

function getBlock(from,elm) { // from: 1(from hrButton) / 0(from hrTextarea), elm: this
	var id = elm.id.substring(2);
	var block = [];
		block[0] = (from) ? $(elm) : $('#mc' + id);
		block[1] = (from) ? $('#ma' + id) : $(elm);
	return block; // block: [button,textarea]
}
function changeBlock(actn,elms) { // actn: 1(show) / 0(hide), elms: [button,textarea]
	var d = (actn)?['block','120px','340px']:['none','15px','290px'];
	elms[0].css('display',d[0]);
	elms[1].css({'height':d[1],'width':d[2]});
}
function checkFocus(whom,elms) { // whom: 1(check button) / 0(check textarea), elms: [button,textarea]
	var elm = (whom) ? elms[0] : elms[1];
	setTimeout(function() {
		if (!elm.is(':focus')) changeBlock(0,elms);
	}, 10);
}
function doAjax(block) { // block: [button,textarea]
	var mind_data_tosrv = {};
	mind_data_tosrv['action'] = 'comment';
	$.ajax({
		type: 'POST',
		url: 'http://',
		contentType: 'application/json; charset=UTF-8',
		data: JSON.stringify(mind_data_tosrv),
		success: function(data){
			// ...
			changeBlock(0,block); // выполнится при удачном завершении запроса 
			// ...
		},
		error: function(){            // ДЛЯ ПРИМЕРА
			setTimeout(function() {   // эмуляция удачного завершения запроса
				changeBlock(0,block); // выполнится 
			}, 3000);                 // через 3 сек 
		}
	});
}
function hrButton(event) {
	var block = getBlock(1,this);
	switch (event.type) {
		case 'click':
			doAjax(block);
			break;
		case 'focusout':
			checkFocus(0,block);
	}
}
function hrTextarea(event) {
	var block = getBlock(0,this);
	switch (event.type) {
		case 'focusin':
			changeBlock(1,block);
			break;
		case 'focusout':
			checkFocus(1,block);
	}
}
</script>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при быстром многократном клике по кнопке обрабатывать только первый клик battrack jQuery 3 22.03.2012 10:47
Как определить активное окно/вкладку? Chameleon Events/DOM/Window 5 19.03.2012 08:59
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
Не отрабатывает событие onmouseout при внедрении нового слоя ilshat Элементы интерфейса 3 28.07.2008 06:27
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40