非常感谢黑客。我自己使用过它,但对其进行了修改,因此仅在通过执行以下操作使用 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 上测试并且运行良好。并且也适用于其他真正的浏览器。希望这可以避免一些编码人员在处理这个问题时感到头疼。