jQuery использование вертикальной полосы прокрутки и mousedown - FireFox работает, IE имеет проблему - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть меню со скриптом jQuery, которое выскакивает при срабатывании события.Он имеет вертикальную полосу прокрутки на стороне.Прокрутка работает нормально в FireFox, но не в IE (8 или 9).Я предполагаю, что это как-то связано с событием mousedown, которое необходимо для выбора элемента из меню.

    .mousedown(function (event) {
        var li = get_element_from_event(event, "li");
        if(li){
            return false;
        }

В случае IE при щелчке мышью по полосе прокрутки менюснова сворачивается (как если бы пользователь сделал выбор).

Это общая проблема в IE (т.е. проблемы с полосой прокрутки)?

Я думаю, что это также связано со следующим фрагментомкода полосы прокрутки

$(".token-input-list")[0].scrollTop = $(".token-input-list")[0].scrollHeight;

Ответы [ 4 ]

0 голосов
/ 04 апреля 2013

Проблема в том, что используется глобальный объект window.event, а не объект события jQuery. window.event работает только в некоторых браузерах и не является стандартом W3C.

jQuery нормализует объект события, поэтому он одинаков во всех браузерах. Обработчику события передается этот объект события jQuery в качестве параметра. используя это.

$(".class_name").mousedown(function (e) {

  switch (e.which) {
    case 1: //leftclick
        //...
        break;
    case 3: //rightclick
        //...
        break;
  }
});
0 голосов
/ 20 февраля 2011

Если ваше событие .mousedown прикреплено к тому же элементу, на котором находится полоса прокрутки, переместите событие .mousedown на новый элемент div внутри элемента div с полосой прокрутки.

0 голосов
/ 20 февраля 2011

Спасибо за ваш вклад - я обнаружил довольно много ошибок в вопросе о полосе прокрутки, поэтому я решил ее, включив хороший список сценариев, найденный здесь: http://rascarlito.free.fr/hoverscroll/. Уловка для IE и, следовательно, для меня; )

0 голосов
/ 20 февраля 2011

В зависимости от того, что делает get_element_from_event(), и что еще вы делаете с mousedown, IE может вести себя корректно - если цель события не является элементом, он предположительно вернет false для li, и поэтому он потерпит неудачу if(li) и, следовательно, не вернет false для mousedown, но продолжит пыхтеть вперед.

Что касается исправления, вам нужно узнать, что IE возвращает за li (через предупреждение или консоль), и либо проверить его в get_element_from_event(), либо в новой var / function.

...