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 внутри элемента с полосой прокрутки.