Пытаясь использовать функцию автозаполнения YUI, мы столкнулись с тем, что крайне медленно при IE6 для источника данных, содержащего 30000 элементов (при попытке ввести поле автозаполнения для ответа IE требуется несколько МИНУТ).
Однако тот же самый точный код работает в реальном времени в IE8.
Мы что-то делаем не так? Можем ли мы как-то оптимизировать это? Разве IE6 + YUI autocomplete не предназначен для таких больших наборов данных?
Вот наш код инициализации автозаполнения:
Y.namespace( 'YAHOO.program' );
Y.program.AllTreeItemsArr = new Array();
// Populate the array with 30000 elements
Y.program.BasicLocal = function() {
var oDS = new YU.LocalDataSource(Y.program.AllTreeItemsArr);
oDS.responseSchema = {fields : ["portfolio"]};
var oAC = new Y.widget.AutoComplete("selected"
, "autocomplete_container", oDS);
oAC.prehighlightClassName = "yui-ac-prehighlight";
oAC.useShadow = true;
oAC.typeAhead = true;
oAC.queryDelay = .05;
oAC.typeAheadDelay = .5;
return {
oDS: oDS,
oAC: oAC
};
}();
А вот HTML-код для его использования:
<span id="port_autocomplete" class="yui-skin-sam" style='position: relative;'>
<input type='text' id='selected' maxlength=10 name='selected'
value='' isSelected=1 onkeyup="searchOnEnter();">
<div id="autocomplete_container" style="position: absolute"></div>
</span>
Функция searchOnEnter
- это стандартная функция «поймать нажатие клавиши и выполнить функцию поиска JS, если key == 13».