2014-12-03 6 views
1

У меня есть эта простая функция, которая нуждается в обновлении текущей текстовой областью.jquery disable document function

$(document).on("keydown", updated_textarea_var, function (e) { 
    // do stuff 
    }); 

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

$(selector).off(); 

Мои переменные правильные. Можно использовать .off() с функцией документа? Или я использую его неправильно? Или, может быть, есть лучший способ сделать это?

+1

Что такое 'селектор'? – Ryan

+0

@minitech селектор - это предыдущая обновленная_текстарея_var. – Mathew

+0

необходимо указать код, который вы используете для 'disable'. Несколько фрагментов ничего не говорят никому – charlietfl

ответ

7

.off() должен использоваться с тем же селектором и событием, которое использовалось с .on(). Таким образом, чтобы отцепить это:

$(document).on("keydown", updated_textarea_var, function (e) { 

вы бы использовать это:

$(document).off("keydown", updated_textarea_var); 

Вы должны быть направлены на один и тот же объект (тот, первоначальное событие, прикрепленную к), и вы должны быть направлены на соответствующее событие так JQuery знает, какие обработчики событий удалить. Вы можете дополнительно настроить целевой вторичный селектор и/или фактическую функцию обратного вызова, если хотите получить более мелкое зернистое соответствие для удаления.

Однако, поскольку вы используете делегированное управление событиями, вам может не потребоваться отключить обработку событий. Если мы больше понимаем, что вы на самом деле пытаетесь сделать, может быть более чистый вариант.


Например, если вы просто пытаетесь изменить который текстовое поле является мишенью обработчиком события, то вы можете использовать имя класса в обработчик событий (скажем, есть имя класса называется «мишенью»), как это:

$(document).on("keydown", ".target", function (e) { 

и затем изменить который текстовое поле обработчик событий в действии, вам как раз удалить имя класса из одного текстового поля и добавить его к другому. Это ключевая функция делегированной обработки событий.

+0

Спасибо, у меня было ощущение, что это будет что-то вроде этого. Причина, по которой он должен измениться, заключается в том, что целевой элемент изменится с «последнего» на «от второго до последнего» и наоборот – Mathew

+0

@Mathew - если вы используете имя класса в целевом элементе и передаете это имя класса здесь '$ (документ) .on («keydown», «.target», function (e) {', тогда все, что вам нужно сделать, чтобы изменить целевой элемент, - это удалить имя класса из одного элемента и добавить его в другое. делегированное управление событиями. – jfriend00