Большое спасибо за взлом. Я использовал это сам, но изменил его так, чтобы он вызывался только при использовании Ajax.Autocompleter, выполнив следующие действия.
function positionAuto(element, entry) {
setTimeout( function() {
Element.clonePosition('choices_div', 'text_element', {
'setWidth': false,
'setHeight': false,
'offsetTop': $('text_element').offsetHeight
} );
}, 300);
return entry;
}
new Ajax.Autocompleter('text_element', 'choices_div', [url to web service], {
paramName: 'fulltext',
minChars: 2,
callback: positionAuto, // See above
[etc...]
Поскольку обратный вызов вызывается непосредственно перед тем, как будет сделан реальный запрос, позиционирование DIV именно в этот момент имеет смысл. И убедитесь, что даже если размер окна изменен или прокручен, DIV будет правильно расположен. Что сводит с ума то, что для того, чтобы он работал последовательно, мне пришлось обернуть его в "setTimeout ()". Я не слишком много экспериментировал с разными настройками времени, но если есть более низкий порог времени ожидания, я хотел бы знать.
Проверено на IE 8 & 7 и работает очень хорошо. И работает с другими реальными браузерами. Надеюсь, это избавит некоторых программистов от головной боли при работе с этим.