2015-04-01 3 views
0

Когда я используюДолжен ли я/как очистить прослушиватель событий jQuery mousemove? не

$(".page").mousemove(function(event){}); 

Как только приходит mouseup событие, я больше не нужен этот слушатель. Поскольку я буду применять слушателя повторно для разных действий, мне кажется, что эти слушатели могут придерживаться и наращивать (ненужно тратить процессор), так как пользователь многократно активирует функцию. Я не совсем уверен, как это работает внутри, это только моя догадка.

Должен ли я/как очистить прослушиватель событий JQuery mousemove?

+2

В обработчике событий 'mouseup' используйте' $ (this) .off ('mousemove'); 'или если имеется более одного элемента' $ ('. Page'). Off ('mousemove'); ', в зависимости от ожидаемое поведение. Но это звучит как проблема XY, почему вы связываете ее более одного раза? –

+0

Поскольку переменные/элементы задействованы/созданы во время функции, поэтому слушатель должен выполняться во время функции, так как ему нечего прикреплять до начала функции. –

+0

@ A.Wolff Хорошая идея, спасибо, что показал мне это. –

ответ

4

Вот код:

$('.page').off('mousemove'); 

Но обратите внимание, что следующий подход отключает все функции стрельбы на mousemove. Если вы хотите, чтобы отключить prticular функции, то вы должны сделать следующее:

// Define function that fires on mousemove 
function anyFunctionName() { 
    // Some code 
} 

// Set listener 
$('.page').on('mousemove', anyFunctionName); 

// Turn off only function called funcionName 
$('.page').off('mousemove', anyFunctionName); 

Другим способом для отключения определенной функции будет является определяющим именем события:

// Define function that fires on mousemove 
function anyFunctionName() { 
    // Some code 
} 

// Set listener 
$('.page').on('mousemove.anyEventName', anyFunctionName); 

// Turn off only function fired on event called anyEventName 
$('.page').off('mousemove.anyEventName'); 
1

Я был в состоянии чтобы получить рабочий пример, используя более общие функции .on и .off JQuery вместо их явных обработчиков. Вот код, который я использовал:

$('.page').on('mousedown', function() { 
    $(this).on('mousemove', function(event) { 
     // Do something meaningful 
    }); 
}); 
$('.page').on('mouseup', function() { 
    $(this).off('mousemove'); 
}); 

Вот JFiddle Demo из него.

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