Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.04.2009, 05:19
Новичок на форуме
Отправить личное сообщение для Bratok Посмотреть профиль Найти все сообщения от Bratok
 
Регистрация: 27.04.2009
Сообщений: 6

В объекте не корректно работает инкремента (++ или +=1))
Трудность сдедующая. Есть код написанный мной (используется jquery ):
var PDNS = function() //это пространство имен
{   var pullDownList = new Object(); // это переменная в которй будем хранить объект описаный ниже
    function pullDownListI() // это объект который храниться в переменной выше, он является интрефейсом для работы с HTML элементами 
    {  this.index = 0;
        this.objId  = 0;
        
        this.init = function( objId  ) // инициализирует интерфейс при получении фокуса
        {	this.index = 0;
           this.objId = objId; 
	$( "#"+objId ).keyup( function(){ PDNS.pullDownList.keypress( event ) } )
			
        }
		
        this.reset = function( ) // сбрасывает все настройки интерсейса при потери фокуса
       {	this.index= 0;
           this.objId = null;
        }
		
        this.keypress= function ( event )
       {	   
	//////////////////////////////////////////	 	
	this.index++; //здесь проблемная зона
           ///////////////////////////////////////
            $( "#test" ).text( this.index ); // выводим результат в элемент #test , что бы не потерять фокус на элементе  
       }
    }
	
    return {	
       pullDownListI:	pullDownListI, //делаем публичными переменные
       pullDownList:	pullDownList
    }
}();
		

$(document).ready( function() 
{	
	
	PDNS.pullDownList = new PDNS.pullDownListI(); 
	
	var listElement = $("#element");
          //назначаем элементам выполнение функций при получении и потере фокуса
	for ( i=0; i<listElement.length; i++)
	{	var id = listElement[i].id;
		if ( id  )
		{	$( listElement[i] ).focus( function ( ) { PDNS.pullDownList.init( id  ) } );
			$( listElement[i] ).blur(  function () { PDNS.pullDownList.reset() } );
		}
	}
	
	//alert( listElement.length );
} );

При первом получении фокуса и выполнении this.index++, все ОК.
При потере и следующем получении фокуса this.index++ прибавляет 2 вместо 1. Если еще раз потерять и получить фокус прибавляться будет уже 3 и т.д. Кто знает вчем трудность и где ошибка подскажите, уже голову сломал. Или это глюк, какой-то.Код вроде простой.
Ответить с цитированием
  #2 (permalink)  
Старый 27.04.2009, 13:01
jsch
 
Сообщений: n/a

у тебя при каждом фокусе объявляется событие keyup а оно не переопределяется а дополняется. получается после второго фокуса у тебя будут выполнятся уже две функции где инкрименируется свойство index
либо очищай событие keyup (.unbind) во время потери фокуса
либо вынеси объявление .keyup туда же где .focus и .blur
Ответить с цитированием
  #3 (permalink)  
Старый 28.04.2009, 01:28
Новичок на форуме
Отправить личное сообщение для Bratok Посмотреть профиль Найти все сообщения от Bratok
 
Регистрация: 27.04.2009
Сообщений: 6

Блин точно, вот затупил!!! Спасибо огроменное!!!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59