jQuery использование вертикальной полосы прокрутки и mousedown - FireFox работает, IE имеет проблему

У меня есть меню, написанное с помощью 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 ответа

Решение

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

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

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

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

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

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

  switch (e.which) {
    case 1: //leftclick
        //...
        break;
    case 3: //rightclick
        //...
        break;
  }
});

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

Другие вопросы по тегам