2015-11-27 3 views
0

Допустим, у меня есть следующий код:Добавление нескольких событий к элементу

function addScrollEvent(scrollElement, direction) { 
    $(scrollElement).mouseover(function(){ 
     var maxStreckeY = $("#viewport div").height() - $("#viewport").innerHeight(); 
     var currentPos = $("#viewport").scrollTop(); 
     if (direction == "down") { 
      var restStrecke = maxStreckeY - currentPos; 
      var timer = restStrecke/maxStreckeY * namespace.config.autoScrollSpeed; 
      $(element).stop().animate({scrollTop: maxStreckeY}, timer); 
     } 
     if (direction == "right") { 
      var width = $("#viewport div").width(); 
      $(element).stop().animate({scrollLeft: width - $("#viewport").innerWidth()}, namespace.config.autoScrollSpeed); 
     } 
     if (direction == "up") { 
      var timer = currentPos/maxStreckeY * namespace.config.autoScrollSpeed; 
      $(element).stop().animate({scrollTop: 0}, timer); 
     } 
     if (direction == "left") { 
      $(element).stop().animate({scrollLeft: 0}, namespace.config.autoScrollSpeed); 
     } 
    }); 

    $(scrollElement).mouseleave(function(){ 
     $(element).stop(); 
     checkScrollElements(); 
    }); 

Как я добавляю несколько событий в scrollElement? я хотел бы сделать точный код на tabhold (в наведении курсора мыши часть), а также на tableave (в MouseLeave части)

Я уже пытался сделать что-то вроде этого:

$(scrollElement).on("mouseover tabhold", function(){ 
    ... the function 
}); 

, которые на самом деле не работать, так как консоль дал мне следующую ошибку:

"on is not a function" 

Кто-нибудь получил разрешение для этого без копирования и тот же код для другого блока событий? Заранее благодарен

+0

какая версия jQuery вы используете? если в старой версии (<1.7) используйте 'live()' вместо 'on()' –

+0

Im, использующий версию jQuery версии 1.6 – TeaTime

+0

Вместо того, чтобы объявлять поведение обработчика внутри функции addEventListener, определите его как отдельную функцию и передайте ссылка на функцию в –

ответ

1

Ваше решение on правильно; проблема в том, что вы используете устаревшую копию jQuery. v1.6 устарела v1.7 четыре года назад. Обновляйте до последней версии.

Если по каким-то причинам вы не можете, старая функция bind:

$(scrollElement).bind("mouseover tabhold", function(){ 
    ... the function 
}); 

Другой вариант заключается в написании функции отдельно, дать ему имя, и использовать это имя. Одним из преимуществ этого является то, что он позволяет вам использовать функцию в сочетании с другими, если это необходимо.

+0

Итак, почему они изобрели 3 разных типа для обработки нескольких событий? я не понимаю. во всяком случае это решило мою проблему. по крайней мере, я не получаю никаких ошибок таким образом. я попробую с моим планшетом и проверить, работает ли он или нет :) – TeaTime

+2

@TeaTime: Первоначально это было 'bind'. Затем делегирование событий было добавлено в форме 'live' и' delegate'. Затем они решили, что было глупо иметь два разных API: один для прямой обработки и другой для делегирования, а по отдельности было несколько проблем с 'live'. Поэтому они решили создать новый унифицированный API, который выполнял как прямую, так и делегированную обработку, и они называли его 'on'. –

Смежные вопросы