6

Я борюсь с проблемой с Script.aculo.us Управлением автозаполнения в IE (я пробовал его в IE6 & 7). Предложения не отображаются для первого символа, который вводится в текстовое поле после загрузки страницы. После этого первоначального сбоя управление работает так, как должно.Script.aculo.us Проблема автозаполнения в IE

Я проверил, что данные предложений возвращены с сервера правильно; проблема, похоже, связана с позиционированием элемента предложений, поскольку другие относительно позиционированные элементы на странице выходят из положения в тот момент, когда вы ожидаете появления предложений.

Кто-нибудь слышал о такой проблеме или какие-либо предложения по ее устранению?

Редактировать: В ответ на Chris я установил параметр partialChars равным 1, и элемент управления работает во всех других браузерах, которые я пробовал, это последние версии Firefox, Safari, Opera и Chrome. Вероятно, я должен был это сделать в первую очередь. Благодарю.

+3

Это была моя проблема, спасибо! Упрекает всех и всех! Теперь я ухожу за хорошо заработавшим пинг-понг. – 2009-09-18 20:32:10

ответ

2

Это ваша проблема только в IE или во всех браузерах? Игнорирование первого символа фактически является значением по умолчанию для автозапуска. В controls.js, есть класс, называемый Autocompleter.Local, который имеет поле под названием partialChars который по умолчанию 2. Документы для этой области говорят:

// - partialChars - Сколько символов для ввода перед запуском
// частичное совпадение (в отличие от minChars, которое определяет
// сколько символов требуется для любого соответствия
// вообще). По умолчанию. 2.

1

Я до сих пор не знаю, что именно вызвало эту проблему, но мне удалось придумать взломать ее. Идея заключается в том, чтобы выполнить обработку, которая обычно вызывает отказ на первом вводе символов при загрузке страницы, чтобы получить его из пути:

new Ajax.Autocompleter(textInputId, suggestionsHolderId, suggestionsUrl, params); 

//Hack 
Event.observe(window, 'load', function() 
{ 
    try 
    { 
     Position.clone($(textInputId), $(suggestionsHolderId), 
      { setHeight: false, offsetTop: $(textInputId).offsetHeight}); 
    } 
    catch(e){} 
}); 
5

Я действительно имеющий ту же самую проблему. Проблема возникает только в IE (также в версии 8.0)

Как Firefox, так и Chrome я старался, у вас нет проблем, что-то никогда.

По мнению других, это связано с объявлением DOCTYPE в файле HTML. Проверьте здесь: http://prototype.lighthouseapp.com/projects/8887/tickets/32-ajax-autocomplete-in-ie-with-doctype

Данной ошибка также получила билет на досках разработчика рубина: http://dev.rubyonrails.org/ticket/11051

Обе ссылки получила решение, чтобы исправить эту проблему.

Будем надеяться, что ошибка будет исправлена ​​в следующей версии прототипа/Scriptaculous :)

3

Большое спасибо за хак. Я сам использовал это, но изменил его, поэтому он вызывается только тогда, когда используется 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 и работает очень хорошо. И работает с другими реальными браузерами. Надеюсь, что это избавит некоторых головных болей от кодеров при работе с этим.

2

После долгих проблем с этой проблемой в IE8/IE9 я закончил использование CSS-хака. Способ здесь состоит в том, чтобы заставить положение относительное в контейнере с абсолютным расположением. Дополнительный контейнер необходим для того, чтобы плавать выбор по другим элементам.

div.acwrap { 
    position: absolute; 
    height: 40px; 
} 

div.autocomplete { 
    position: relative !important; 
    top: -5px !important; 
    left: 0px !important; 
    width:250px; 
    margin:0; 
    padding:0; 
} 

В моем HTML код, который я использовал классы следующим образом:

<div class="acwrap"> 
<div id="autocomplete_choices" class="autocomplete"> 
</div> 
</div> 

Идея возникла здесь: Scriptaculous/Prototype IE 8 Autocomplete disappearing problem.