Список автозаполнения Scriptaculous закрывается при нажатии полосы прокрутки - PullRequest
0 голосов
/ 13 декабря 2011

У меня действительно раздражающая проблема с автозаполнением Prototype 1.6. Я установил div и диалог в стиле с формой, которая содержит автозаполнение. Все работает нормально, пока я не нажму на полосу прокрутки или не перетяну ее он закрывает список предложений. Я проверил это решение , но теперь я получил ошибку JavaScript

event.srcElement не определен

Я проверял файл control.js и пытался перехватить объект события внутри события onBlur, но он перемещается пустым. Напечатано свойство offsetX и не определено. Похоже, событие больше не существует. в любом случае, это предотвращает закрытие списка, но, если я щелкну за пределами области, список теперь не закроется. И это тоже своего рода проблема

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

Заранее спасибо

1 Ответ

1 голос
/ 14 декабря 2011

Вчера у меня была точная проблема, но после некоторых исследований я получил довольно удобное решение для этого.
По умолчанию этот скрипт скрывал результат div (Список предложений) в событии размытия в текстовом поле поиска, поэтому, как только мы нажмем на полосу прокрутки div, фокус исчезнет из элемента ввода, а div результата закроется. Поэтому я сделал небольшое изменение в файле control.js, чтобы изменить поведение скрипта, поэтому теперь метод result close close не вызывает размытие (фокусировка) элемента ввода, а срабатывает при щелчке документа, кроме элемента ввода текста.

Для вашего удобства я поместил отредактированный файл controls.js здесь .

Если вы хотите знать, что изменилось в файле JS, вот оно;

  1. Добавлен прослушиватель событий в документ. Чуть ниже этой линии
    "Event.observe (this.update," нажатие клавиши ", this.onKeyPress.bindAsEventListener (this));"

    Event.observe($(document), "mouseup", this.onMouseup.bindAsEventListener(this));
    
  2. Добавлен новый метод onMouseup.

    onMouseup: function(event) {    
    if(!this.hasFocus) {  
        this.hideTimeout = setTimeout(this.hide.bind(this), 250);   
            this.hasFocus = false;  
            this.active = false;  
        }  
    },
    
  3. Изменить метод onBlur (закомментировать две строки в блоке)

    onBlur: function(event) { 
    
        //this.hideTimeout = setTimeout(this.hide.bind(this), 250);   
        //this.active = false;  
        this.hasFocus = false;       
    } 
    

Надеюсь, это решит вашу проблему.

Спасибо
Винод Кумар

...