Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.04.2009, 14:28
qweqwe
 
Сообщений: n/a

отменить действия обработчика
на странице есть текстовый input, при потере фокуса ввода (onblur), закрывается другой элемент, но если потеря фокуса произошла в связи с кликом на тот самый элемент, который должен скрываться, нужно как то отменить обработчик (onblur) инпута, как это реализовать
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2009, 17:56
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Что-то типа такого:

inputEle.onblur=function(){
this.onclick=null;
}

inputEle.onclick=function(){
this.onblur=null;
}


Или можно попробовать енту ф-цию
function clearEvent(event){
    event=event||window.event;
    if(event.stopPropagation) event.stopPropagation();
    else event.cancelBubble = true;
    if(event.preventDefault) event.preventDefault();
    else event.returnValue = false;
}


В обработчике... Не тестил еси чесно... Самому интересно...
Ответить с цитированием
  #3 (permalink)  
Старый 15.05.2009, 11:51
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

Я бы не стал убивать какую либо функцию в обработчике события, ибо потом её придётся каким то образом возвращать обратно, соответсвенно для этого нужна дополнительная переменная-хранилище. В общем, это лишняя головная боль.
Думаю, тут лучше поменять саму логику появления и исчезновения элементов страницы. Как я понял по поставленной задаче, вы пытаетесь сделать нечто подобное выпадающего списка при вводе поиского слова (как это реализовано например в гугле). Я бы это реализовал так:
<input id="srch" type="text" name="text" value="" style="width:200px" />
<div id="dropDownList" style="display: none;margin: -1px 0px 0px 0px; border: 1px solid #0000ff; width:200px;">
	<ul style="margin:0px">
		<li style="cursor:pointer" onclick="insSrchStr(this)">Пункт 1</li>
		<li style="cursor:pointer" onclick="insSrchStr(this)">Пункт 2</li>
		<li style="cursor:pointer" onclick="insSrchStr(this)">Пункт 3</li>
	</ul>
</div>
<script language="javascript" type="text/javascript">
<!--
function insSrchStr(o){
	document.getElementById('srch').value=o.innerHTML;
	document.getElementById('dropDownList').style.display='none';
}
function init(){
	document.getElementById('srch').onmouseover=function(){
		document.getElementById('dropDownList').style.display='block';
	}
	document.getElementById('srch').onmouseout=function(){
		document.getElementById('dropDownList').style.display='none';
	}
	document.getElementById('dropDownList').onmouseover=function(){
		document.getElementById('dropDownList').style.display='block';
	}
	document.getElementById('dropDownList').onmouseout=function(){
		document.getElementById('dropDownList').style.display='none';
	}
}
document.body.onload=init();
//-->
</script>
Хитрость заключается в том, что слой со списком находится 1 пикселем над input-полем. Соответсвенно, если пользователь возжелает что то выбрать и появившегося списка, он мышь будет перемещать сверху вниз. Поэтому событие onmouseover над слоем возникнет раньше, чем onmouseout input-поля, соответственно, слой не исчезнет. Ну а далее, дело техники.
Ответить с цитированием
  #4 (permalink)  
Старый 15.05.2009, 12:16
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

не люблю я эти хитрости, можно кого не надо перехитрить
я бы в input флаг сделал какой-нибудь, который бы и проверял при потере фокуса (if (! this.cancelHide)), а при щелчке его устанавливал (inputVar.cancelHide = true
Ответить с цитированием
  #5 (permalink)  
Старый 15.05.2009, 12:56
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

x-yuri, на самом деле вариантов вагон и маленькая тележка. Сам делаю именно так как ты предложил. Но предложил самый простой прямой как рельсы способ и более наглядный.
Ответить с цитированием
  #6 (permalink)  
Старый 15.05.2009, 15:47
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Сообщение от Pattern
Но предложил самый простой прямой как рельсы способ
Изобретаете не понятно что.
Единственно правильный способ уже был предложен:

Сообщение от B~Vladi
function clearEvent(event){
event=event||window.event;
if(event.stopPropagation) event.stopPropagation();
else event.cancelBubble = true;
if(event.preventDefault) event.preventDefault();
else event.returnValue = false;
}
Ответить с цитированием
  #7 (permalink)  
Старый 15.05.2009, 16:12
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а как тут clearEvent поможет?
p.s. мне лично не очевидно, что речь идет о выпадающем списке... по-крайней мере странное у него поведение должно быть
Ответить с цитированием
  #8 (permalink)  
Старый 15.05.2009, 17:29
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

clearEvent поможет предотвратить просачивание остальных событий... Мы поймали, к примеру, onclick и дальше событие не будут просачиваца... Что и хотели получить собственно... Будет время - напишу рабочий пример...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при добавлении обработчика к событию Riim Events/DOM/Window 32 19.01.2010 14:17
Как отменить прокрутку при клике Alekson jQuery 1 30.03.2009 20:53
Отменить поведение по умолчанию bool Общие вопросы Javascript 3 06.03.2009 16:59
Отменить обработку события Fr0sT Events/DOM/Window 7 24.12.2008 13:18
кроссбраузерное добавление обработчика событий элементу krinart Events/DOM/Window 5 30.09.2008 04:38