2016-08-05 3 views
3

У меня есть событие keydown на элементе.Удалить событие keydown из jquery элемента не работает

$("#element").keydown(function() { 
    // do stuff! 
}); 

Теперь я хочу его удалить.

Я пробовал unbind и off, но ни один из них не работает.

$("#element").unbind("click"); 
$("#element").off("click"); 

Нужно ли мне делать .on("click", function...) или .bind("click", function...) вместо .click при использовании unbind или off. Если это так, это не мой код, и мне не разрешено изменять его, поэтому мне нужен альтернативный способ.

Есть ли какой-либо способ, отличный от «unbind» или «off», который действительно работает?

Спасибо, очень благодарен!

+0

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

+0

@DustinRW Я не понимаю, что вы имеете в виду? –

+0

То, что я имею в виду, это перенос вашей функции в другую функцию. Например, вы можете обернуть свою функцию _above_ в другую написанную функцию и создать набор условных выражений. 'var outerFunction = function() {if (condition met) {$ (" # element "). keydown (function() { // do stuff! }); }; 'Я просто предполагаю, что вы хотите, чтобы ваша функция вызывалась только один раз, а затем останавливалась или выполнялась только при выполнении определенных критериев. Надеюсь, моя идея понятна. – DustinRW

ответ

1

.off(events [, selector ] [, handler ]): версии добавлены: 1.7

.unbind(eventType [, handler ]): версии добавлены: метод 1.0

.on() присоединяет обработчик событий к выбранному набору элементов в объекте JQuery. Начиная с jQuery 1.7, метод .on() предоставляет всю функциональность, необходимую для прикрепления обработчиков событий. Для получения помощи в преобразовании из старых методов событий jQuery см. .bind(), .delegate() и .live(). Чтобы удалить события, связанные с .on(), см. .off(). Чтобы прикрепить событие, которое работает только один раз, а затем удаляет себя, см .one()

Итак, я предлагаю обратить внимание на версию JQuery, так как привязка/отвязать не используются намного больше.

В следующем фрагменте вы можете увидеть .off() работает отлично:

$(window).load(function() { 
 
    $("#element").keydown(function(e) { 
 
    console.log('keydown event'); 
 
    }); 
 
    $("#elementOff").click(function() { 
 
    // unbind keydown 
 
    $("#element").off('keydown'); 
 
    
 
    // attach click 
 
    $("#element").off('click').click(function(e) { 
 
     console.log('click event'); 
 
    }); 
 
    }); 
 
});
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 
 

 
<form> 
 
    <input id="element" type="text"> 
 
</form> 
 
<button id="elementOff">Unbind Keydown and attach Click</button>

+0

Написал неправильную вещь, у меня действительно есть событие «keydown», извините. –

+0

@DavidCallanan Обновлен ответ и фрагмент. Я надеюсь, что это может решить вашу проблему. – gaetanoM

+0

@DavidCallanan вы можете попробовать обернуть свой код в $ (window) .load (function() {function? – gaetanoM

1

По мере того как .click() метод просто сокращение для .На ("нажмите ", обработчик), отрыв возможен используя. от ("нажмите"):

$("#element").off("click", function(){ 
    $("#element").hide(); //not working 
}); 

$("#element2").on("click", function() { 
    $("#element2").hide(); //working 
}); 

Так что если у вас есть .keydown (обработчик), это ярлык для .он ("KeyDown", обработчик) в первый и второй варианты, и .trigger («keydown») в третьем.

Приведенные аргументы должны совпадать для удаления обработчика события.

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

<script src="your_external_script.js"></script> 

с похожим содержанием:

$(document).ready(function(){ 
    $("#element2").unbind("click"); 
}); 
+0

Согласно http://api.jquery.com/off/, не требуется передавать в обратном вызове его удаление. Также я не могу вспомнить, где я его читал, но он сказал, что вы не можете передавать анонимную функцию в качестве параметра обратного вызова. Это также внешний код моего друга, который может измениться в будущем (и использует анонимные функции), так как я могу сделать это в этой ситуации? –

+0

да, конечно. я просто сделал пример, чтобы показать, как «on» и «off» ведут себя в том же контексте. чтобы отключить его, вы можете просто «(« # element »). off (« click »); '. Я просто попытался использовать внешний скрипт, и он отменил событие успешно, поэтому позвольте мне обновить свой ответ :) – krankuba

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