Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   При повторном фокусе добавляются события blur и keydown (https://javascript.ru/forum/events/29629-pri-povtornom-fokuse-dobavlyayutsya-sobytiya-blur-i-keydown.html)

sdaww 05.07.2012 14:20

При повторном фокусе добавляются события blur и keydown
 
Есть код, смысл его в том, чтобы при фокусе происходила инициализация переменных и эти переменные использовались в дальнейшем для событий blur и keydown.

Код работает не совсем как надо. Если после blur делаем focus в тот же input, то при последующем вводе email события удваиваются, то есть вместо одного keydown происходит два, вместо одного blur - два.

Как этого избежать?


$("#email").focus(function()
{
	var t = 'test';
	
	console.log("focus %s",t);
	
	$(this).on(
	{
		blur: function()
		{
			console.log("blur %s",t);
		},
		keydown: function()
		{
			console.log("keydown %s",t);	
		}
	});		
});

Deff 05.07.2012 14:30

sdaww,
Ставьте однократное событие - при возникновении которого - ставьте новое однократное - обработчик в отдельной функции вызываемой по событию

http://jquery-docs.ru/Events/one/#typedatafn

sdaww 05.07.2012 15:15

Изврат конечно, но такой код вроде работает:

$("#email").one(
{
	'focus': function()
	{
		var t = 'test';

		function ficus()
		{
			console.log("focus %s",t);	
		}
		
		ficus();
		
		$(this).on(
		{
			'focus': function()
			{
				ficus();
			},			
			'blur': function()
			{
				console.log("blur %s",t);
			},
			'keydown': function()
			{
				console.log("keydown %s",t);	
			}
		});			
	}
});


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