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 = ''; |
Попробуйте удалять через $(…).remove()
|
remove empty не помагает так же пробовал unbind все равно в памяти что то есть
|
Скорее всего это из-за обработчиков событий, посмотрите, как плагин autocomplete назначает их, средствами jQuery или напрямую через addEventListener/attachEvent?
|
смотрел с помощью 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(); но почему то не пашет Это тупик? Профи вы где? |
Да, странно, вообще jQuery делает unbind при удалении элементов именно из-за того, чтобы избежать утечек памяти.
|
$('.search').trigger('unautocomplete'); ? |
непомогло $('.search').trigger('unautocomplete');
Ладно бб всем пойду свой autocomplite писать мой попроше будет чем на jquery а халявы все таки хотелось |
Попробуйте еще
$.Autocompleter.Cache({}).flush() |
Часовой пояс GMT +3, время: 12:14. |