Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.08.2009, 18:41
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

Jquery IE6 autocomplite
Доброго всем времини суток.
На странице создаются и удаляются динамически поля с поиском (autocomplite) и если их много раз создавать и удалять появляется утечка памяти или я просто не правильно удаляю.
Функция для привязки созданных полей к autocomplity
function MakeAutocomplete() {
$('.search').autocomplete('/get_data.php',
{
     delay:10,
     minChars:1,
     matchSubset:1,
     autoFill:false,
     matchContains:1,
     cacheLength:0,
     selectFirst:false,
     formatItem: formatItem,
     maxItemsToShow:10
});
$('.search').result(function( event , data , formatted )
{
     alert(data);
});
}


То есть с начала идет создание полей с помощью innerHTML а потом запуск этой функции. Удаляю так:
document.getElementById("mySeachDiv").innerHTML = '';
Ответить с цитированием
  #2 (permalink)  
Старый 30.08.2009, 18:45
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Попробуйте удалять через $(…).remove()
Ответить с цитированием
  #3 (permalink)  
Старый 30.08.2009, 18:54
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

remove empty не помагает так же пробовал unbind все равно в памяти что то есть
Ответить с цитированием
  #4 (permalink)  
Старый 30.08.2009, 18:58
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Скорее всего это из-за обработчиков событий, посмотрите, как плагин autocomplete назначает их, средствами jQuery или напрямую через addEventListener/attachEvent?
Ответить с цитированием
  #5 (permalink)  
Старый 30.08.2009, 19:00
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

смотрел с помощью jquery bind
вот часть кода с событиями из autocomplite
$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
		// a keypress means the input has focus
		// avoids issue where input had focus before the autocomplete was applied
		hasFocus = 1;
		// track last key pressed
		lastKeyPressCode = event.keyCode;
		switch(event.keyCode) {
		
			case KEY.UP:
				event.preventDefault();
				if ( select.visible() ) {
					select.prev();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.DOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.next();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.PAGEUP:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageUp();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.PAGEDOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageDown();
				} else {
					onChange(0, true);
				}
				break;
			
			// matches also semicolon
			case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
			case KEY.TAB:
			case KEY.RETURN:
				if( selectCurrent() ) {
					// stop default to prevent a form submit, Opera needs special handling
					event.preventDefault();
					blockSubmit = true;
					return false;
				}
				break;
				
			case KEY.ESC:
				select.hide();
				break;
				
			default:
				clearTimeout(timeout);
				timeout = setTimeout(onChange, options.delay);
				break;
		}
	}).focus(function(){
		// track whether the field has focus, we shouldn't process any
		// results if the field no longer has focus
		hasFocus++;
	}).blur(function() {
		hasFocus = 0;
		if (!config.mouseDownOnSelect) {
			hideResults();
		}
	}).click(function() {
		// show select when clicking in a focused field
		if ( hasFocus++ > 1 && !select.visible() ) {
			onChange(0, true);
		}
	}).bind("search", function() {
		// TODO why not just specifying both arguments?
		var fn = (arguments.length > 1) ? arguments[1] : null;
		function findValueCallback(q, data) {
			var result;
			if( data && data.length ) {
				for (var i=0; i < data.length; i++) {
					if( data[i].result.toLowerCase() == q.toLowerCase() ) {
						result = data[i];
						break;
					}
				}
			}
			if( typeof fn == "function" ) fn(result);
			else $input.trigger("result", result && [result.data, result.value]);
		}
		$.each(trimWords($input.val()), function(i, value) {
			request(value, findValueCallback, findValueCallback);
		});
	}).bind("flushCache", function() {
		cache.flush();
	}).bind("setOptions", function() {
		$.extend(options, arguments[1]);
		// if we've updated the data, repopulate
		if ( "data" in arguments[1] )
			cache.populate();
	}).bind("unautocomplete", function() {
		select.unbind();
		$input.unbind();
		$(input.form).unbind(".autocomplete");
	});


Если верить этим строкам
bind("unautocomplete", function() {
		select.unbind();
		$input.unbind();
		$(input.form).unbind(".autocomplete");
	});

то я просто должен вызвать
$('.search').unautocomplete();

но почему то не пашет

Это тупик?

Профи вы где?

Последний раз редактировалось Octane, 30.08.2009 в 19:53. Причина: редактируйте свои сообщения, чтобы не было подряд идущих постов от одного и того же пользователя
Ответить с цитированием
  #6 (permalink)  
Старый 30.08.2009, 19:52
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Да, странно, вообще jQuery делает unbind при удалении элементов именно из-за того, чтобы избежать утечек памяти.
Ответить с цитированием
  #7 (permalink)  
Старый 30.08.2009, 19:54
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

$('.search').trigger('unautocomplete');

?
Ответить с цитированием
  #8 (permalink)  
Старый 30.08.2009, 20:10
Аспирант
Отправить личное сообщение для hp5741 Посмотреть профиль Найти все сообщения от hp5741
 
Регистрация: 22.04.2009
Сообщений: 34

непомогло $('.search').trigger('unautocomplete');

Ладно бб всем пойду свой autocomplite писать мой попроше будет чем на jquery а халявы все таки хотелось

Последний раз редактировалось Octane, 30.08.2009 в 21:10. Причина: редактируйте свои сообщения, чтобы не было подряд идущих постов от одного и того же пользователя
Ответить с цитированием
  #9 (permalink)  
Старый 31.08.2009, 17:55
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Попробуйте еще
$.Autocompleter.Cache({}).flush()
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Jquery + XML + Internet Explorer testdriver jQuery 12 15.10.2009 08:14
Jquery, Dynatree и JSON antirek jQuery 6 01.09.2009 15:00
Как правильно подгрузить jQuery Siton jQuery 4 15.06.2009 09:54
IE6 + location.href Snipe Internet Explorer 4 12.11.2008 15:58
первый опыт jquery. Вопросы. Titto jQuery 0 17.09.2008 10:32