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, время: 20:23. |