Ширина автоматически сбрасывается в списке автозаполнения реализацией Base.Autocompleter
. Base.Autocompleter
установит ширину списка равной ширине поля поиска. Есть несколько способов обойти это:
1. Патч Автозаполнение. База самостоятельно
Вы можете установить скрипт Autocompleter.Base
самостоятельно, как описано в этом посте . Для script.aculo.us версии 1.8.1 в controls.js в строке 68 у вас есть следующее:
Position.clone(element, update, {
setHeight: false,
offsetTop: element.offsetHeight
});
Добавьте setWidth: false
в этот объект параметров следующим образом:
Position.clone(element, update, {
setWidth: false,
setHeight: false,
offsetTop: element.offsetHeight
});
2. Удлините свой автозаполнение
Пример ниже предназначен для расширения Ajax.Autocompleter
. Идея состоит в том, чтобы заменить функцию onShow
, которую вызовет базовый класс, чтобы показать автозаполнение и изменить его размер на Position.clone()
.
/**
* Extension of Ajax.Autocompleter that disables width reset.
* @class
*/
var MyAutocompleter = Class.create(Ajax.Autocompleter, {
/**
* @constructor
* @param $super reference to the base class (provided by prototype.js)
* @param id_for_search the id for the search input element
* @param id_for_list the id for autocompletion list element
* @param url the ajax url to be used
*/
initialize: function($super, id_for_search, id_for_list, url) {
$super(id_for_search, id_for_list, url, {
onShow: function(element, update) {
if(!update.style.position || update.style.position=='absolute') {
update.style.position = 'absolute';
Position.clone(element, update, {
setHeight: false,
setWidth: false,
offsetTop: element.offsetHeight
});
}
Effect.Appear(update,{duration:0.15});
}
});
}
});
И вы создаете его как обычно с new
, как и с другими классами автозаполнения.
document.observe("dom:loaded", function() {
new MyAutocompleter('search', 'autoList', 'url/for/ajaxcall');
});
Преимущество последнего заключается в том, что вы можете обновить версию script.aculo.us без повторной загрузки файлов, и вы можете продолжать перегружать и расширять Autocompleter по своему вкусу (если вы знаете, как ведет себя базовый класс). 1029 *