Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Правильно написать событие focusout (https://javascript.ru/forum/jquery/9566-pravilno-napisat-sobytie-focusout.html)

Glook 24.05.2010 20:52

Правильно написать событие focusout
 
У меня есть задача, в которой нужно показывать/удалять блок при установке/снятии фокуса в поле формы. Ну, как подсказки на яндексе, но с тем отличием, что на яндексе в подсказке ссылки, и при клике на них пользователь сразу переходит по ним. А у меня при клике на ссылку текст лишь передаётся в поле и пользователь работает с формой дальше.

К сожалению, если я применяю такой код который расположен ниже, то блок исчезает, а значение ссылки в поле не попадает. :( Подскажите, пожалуйста, как мне написать функцию, чтобы focusout работал, но не когда я кликаю по ссылкам в блоке.

$('#field').live("focusout", function()
{$('#list').remove();
});

Roboteck 24.05.2010 22:17

Может так:

<div class="field_blok">
	<div class="field">
	  <input type="text" class="field" />
	</div>
    <div class="field_list">
      <div>Строка 1</div>
      <div>Строка 2</div>
      <div>Строка 3</div>
    </div>
</div>


var field_over=false; // наведен ли курсор на input или список
	
	var list_vis_hid=function ()
	{
		if (field_over) // Если мышь наведена на field или field_list, то показываем
		{
			$(".field_list").show();
		}
		else // Если нет, то скрываем
		{
			$(".field_list").hide();
		}
	};
	
	$(document).ready(function ()
	{
		$(document).click(list_vis_hid);
		
		$(".field_blok").hover(function ()
		{
			field_over=true;
		},
		function ()
		{
			field_over=false;
		});
		
		$(".field").blur(list_vis_hid);
	});

Glook 24.05.2010 22:43

Спасибо, это работает.
Правда я не ожидал, что так много кода будет. Думал, раз jquery, то смогу парой строк обойтись.

Вообще, заметил, что код который пишут в примерах на том же jqueryAPI сильно отличается от того что в действительности можно найти например в исходниках сайтов.

Roboteck 25.05.2010 11:30

возможно есть способ попроще, очень даже вероятно что есть куча плагинов, но мне в голову пришел этот


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