/ / Supprimer l'écouteur d'événements de l'objet window à l'aide de jquery - javascript, jquery, browser

Supprimer l'écouteur d'événements de l'objet window à l'aide de jquery - javascript, jquery, browser

J'essaie d'enlever blur et focus écouteurs d’événements depuis un objet window en utilisant la fonction unbind de jquery en utilisant:

function removeWindowEvents(){
$(window).unbind("blur") ;
$(window).unbind("focus") ;
}

J'ai enregistré l'événement avec Javascript:

function addEvents(){
window.addEventListener("blur", function(){ document.title = "Blurred" ; });
window.addEventListener("focus", function(){ document.title = "In Focus" ;});


}

Cela ne fonctionne cependant pas. Qu'est-ce que je fais mal? J'ai testé c'est Mozilaa et Chrome (dernières versions)

Réponses:

7 pour la réponse № 1

Vous ne pouvez pas le faire à votre façon.

jQuery peut uniquement dissocier tous les gestionnaires d'événements d'un événement donné si les écouteurs d'origine ont été configurés à l'aide de jQuery.

En effet, un événement ajouté avec addEventListener() doit être enlevé avec removeEventListener() et removeEventListener() nécessite un deuxième argument spécifiant la fonction de rappel.

Du Page MDN:

target.removeEventListener(type, listener[, useCapture])

Si l'événement est enregistré à l'origine à l'aide dejQuery, jQuery contourne cela en enregistrant un seul événement maître avec addEventListener qui pointe vers sa propre fonction de rappel, puis en utilisant son propre événement pour la distribution de tous les événements enregistrés via jQuery. Cela lui permet de supporter générique .unbind() comme si vous essayiez de l’utiliser, mais cela ne fonctionnera que si l’événement original est enregistré avec jQuery et passe donc par le système de gestion des gestionnaires d’événements jQuery.

Donc, sans jQuery, vous le feriez comme ceci:

function blurHandler() {
document.title = "Blurred" ;
}

function focusHandler() {
document.title = "In Focus" ;
}

function addEvents(){
window.addEventListener("blur", blurHandler);
window.addEventListener("focus", focusHandler);
}

function removeWinowEvents() {
window.removeEventListener("blur", blurHandler);
window.removeEventListener("focus", focusHandler);
}

Avec jQuery, vous pouvez le faire comme ceci:

function addEvents(){
$(window).on("blur", function(){ document.title = "Blurred" ; })
.on("focus", function(){ document.title = "In Focus" ;});
}

function removeWindowEvents() {
$(window).off("blur focus");
}

0 pour la réponse № 2

essayez de vous lier avec jQuery voir L'utilisation de JQuery pour lier les fonctions "focus" et "flou" de "fenêtre" ne fonctionne pas dans IE

$(function() {
$(window).focus(function() {
console.log("Focus");
});

$(window).blur(function() {
console.log("Blur");
});
});