Jrails проблемы автозаполнения выбора с DIVs или что-нибудь еще - PullRequest
0 голосов
/ 02 декабря 2009

Я только начинаю использовать jRails и помощник jRails auto_complete

http://github.com/evilmarty/jrails_auto_complete

Я использовал помощник по умолчанию auto_complete перед использованием прототипа, и падение работало нормально с jRails, за исключением наведения на результаты автозаполнения. Если вы используете простой текст для результата, он работает как рекламируется. Но я использовал несколько div в моем партиале, который генерирует вывод для автозаполнения.

<li class="location"><div class="image"><img src="/images/flags/<%=h image %>.png"/></div><div class="name"><%=h location.keyword %>,</div><div class="country"> <%=h location.sideinfo %></div></li>

Он выглядит одинаково, и все CSS работают и выглядят так же, как и раньше, но выбор или зависание результатов перепутаны. Он позволяет выбирать только в том случае, если вы наводите курсор мыши на фон вокруг текста ... что-либо в теге (div, span и т. Д.) Приводит к тому, что при наведении указатель мыши исчезает и нажатие на него не добавляет текст в текстовое поле. *

У кого-нибудь еще были подобные проблемы?

1 Ответ

1 голос
/ 07 сентября 2010

Я немного опоздал, но сегодня я столкнулся с той же проблемой.

Все сводится к всплывающему событию при наведении курсора мыши от дочерних объектов, у которых явно отсутствует свойство autocompleteIndex (оно присваивается только элементам LI. Следовательно, если указатель на один из дочерних элементов, выделение исчезает.

В итоге я изменил jrails_autocomplete.js следующим образом:


    onHover: function(e) {
        var my_index = e.target.autocompleteIndex;
        if (!my_index) {
          my_index = $(e.target).closest('li').attr('autocompleteIndex');
        }
        if (this.index != my_index) {
            this.index = my_index;
            this.render();
        }
        stopEvent(e);
    },

Теперь, если нам не удалось найти свойство autocompleteIndex в элементе, вызвавшем событие mouseover, мы смотрим на ближайшего родителя типа 'li' и используем все, что там есть.

Немного хакерский, но, по крайней мере, сработал для меня.

В отношении sidenote мне также приходилось щекотать по клику, или, когда я щелкнул мышью и нажал, скажем, элемент DIV, индекс был потерян. На самом деле, я удивляюсь, почему это было в первую очередь, в интерфейсе клавиатуры тоже нет ничего похожего.


        onClick: function(e) {
            /*this.index = e.target.autocompleteIndex;*/
            this.selectEntry();
            this.hide();
        },
...