5 votes

event.returnValue = false d'un événement

Je travaille sur une barre de défilement en Javascript. Tout fonctionne bien sauf un problème. Je remarque que lors du défilement de la barre, si je déplace la souris sur le contenu qui est défilé, le contenu est sélectionné. Je ne veux pas que cela se produise, donc j'ai utilisé la méthode preventDefault de l'objet event, qui a parfaitement fonctionné pour IE9 et les autres navigateurs modernes. Mais sur IE7 et IE8, le problème persiste. J'ai donc effectué des recherches et j'ai découvert que je devrais définir le paramètre returnValue de l'objet event sur false. Mais le problème persiste toujours. De plus, si j'écris alert(window.event.returnValue) cela affiche undefined.

scrollbar.onmousedown = function (event) {
    if (typeof event == 'undefined') event = window.event;
    if (typeof event.preventDefault != 'undefined') event.preventDefault();
    event.returnValue = false;
    // faire quelque chose
}

Qu'est-ce que je fais mal ?

2voto

Lemonade Points 475

Dans IE7 et 8, il n'y a pas d'objet événement en tant que paramètre de la fonction, à la place il existe window.event. Essayez

window.event.cancelBubble = true

pour arrêter la propagation. Pour éviter les problèmes avec FireFox etc. faites quelque chose comme ceci :

    if (!event)
       event = window.event;

    //IE9 et autres navigateurs
    if (event.stopPropagation) {
      event.stopPropagation();
    }
    //IE8 et inférieur
    else {
      event.cancelBubble = true;
    }

0voto

Marius Popescu Points 124

J'ai finalement résolu mon problème en ajoutant event.returnValue = false dans l'événement 'onmousemove', plutôt que dans l'événement 'onmousedown' et cela a fonctionné. Cela ne répond pas à la question de pourquoi le code original est incorrect, mais je voulais poster ceci pour les personnes qui voient ma question, pour ne pas perdre leur temps à essayer de m'aider avec un problème que j'ai déjà résolu. Merci pour vos réponses rapides, j'apprécie.

0voto

Sandeep Kamath Points 173

J'ai moi aussi eu le même problème. preventDefault ne fonctionnait pas dans IE. alors j'ai ajouté le code ci-dessous pour arrêter la propagation

if (a_event.preventDefault) {
a_event.preventDefault();
} else if (typeof a_event.returnValue !== "undefined") {
a_event.returnValue = false;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X