de l'événement.returnValue = false ne fonctionne pas
Je suis en train de travailler sur une barre de défilement en Javascript. Tout fonctionne bien sauf pour un problème. J'ai remarqué que tout en faisant glisser la barre de défilement, si je bouge la souris sur le contexte qui est le défilement, le contenu est sélectionné. Je ne veux pas que cela arrive, j'ai donc utilisé le preventDefault
méthode de l'objet d'événement, qui a fonctionné parfaitement pour IE9 et les autres navigateurs modernes. Mais sur IE7 et IE8, le problème persiste. J'ai fait quelques recherches et trouvé que je devais définir le returnValue
paramètre de l'objet d'événement pour de faux. Mais le problème persiste encore. Aussi, si j'écris alert(window.event.returnValue)
il apparaît undefined
.
scrollbar.onmousedown = function (event) {
if (typeof event == 'undefined') event = window.event;
if (typeof event.preventDefault != 'undefined') event.preventDefault();
event.returnValue = false;
//do some stuff
}
Ce que je fais mal?
returnValue
comme une propriété. Pourrait-il être vous avez mal lu et devrait return false
dans le gestionnaire d'événement?ici, stackoverflow.com/questions/1000597/..., la réponse de l'événement.returnValue = false;', est marqué comme étant utile 170 fois, et j'ai aussi lu la documentation de microsoft ici msdn.microsoft.com/en-us/library/ms535863%28v=vs.85%29.aspx et j'ai vraiment ne pas comprendre ce que je suis absent
Essayez de mettre fin à la fonction avec
return false
de toute façon.Il a essayé, n'a pas fonctionné
Après avoir réussi à le faire fonctionner en déplaçant votre code de mousemove au lieu de mousedown, avez-vous essayé d'utiliser seulement de l'événement.preventDefault() ? Cela devrait fonctionner dans IE7&8 sans la nécessité pour l'événement.returnValue = false. Dans IE7&8 sa fenêtre.de l'événement.preventDefault() comme vous l'avez fait. Donc, je suis juste curieux.
OriginalL'auteur Marius Popescu | 2013-07-20
Vous devez vous connecter pour publier un commentaire.
Dans IE7&8 il n'est en aucun cas l'Objet en tant que paramètre à la fonction, au lieu de cela, il existe fenêtre.de l'événement. Essayez
pour arrêter la propagation.
Pour éviter des problèmes avec FireFox, etc. faire quelque chose comme ceci:
Oui cela paraît évident. mousemove est responsable de la sélection de texte. Pauvre de moi je n'avais pas remarqué. Merci pour votre réponse.
Selon ma fatigue logique (2:15 du matin) ... n'est pas si évident : quand j'ai arrêter la propagation de l'événement dans "onmousedown", quand vous déplacez la souris sur l'écran, il devrait agir comme ... il n'y a pas de bouton de la souris enfoncé, juste un simple mouvement sur l'écran avec la souris. Ainsi, si l'utilisateur n'est pas en maintenant le bouton de la souris ... ça n'a pas de sens pour sélectionner le texte. Pourtant, je le répète, je suis fatigué et somnolent 🙂
semble dépendre. vous devriez le tester avec stopPropagation() dans mousedown au lieu de preventDefault(). Je pense que dans mousemove le comportement par défaut est la sélection de texte et, par conséquent, preventDefault() est correcte Et pour mousedown vous devriez arrêter la propagation, en utilisant stopPropagation() ou de fausse déclaration.
OriginalL'auteur Lemonade
J'ai résolu mon problème en fin de compte par l'ajout de l'événement.returnValue = false dans le "onmousemove de l'événement, plutôt que sur "onmousedown" événement et cela a fonctionné. Il ne répond pas à la question sur les raisons de l'original, le code est mauvais, mais je voulais poster cette pour les gens qui voient ma question, pour ne pas perdre leur temps à essayer de m'aider avec un problème que j'ai déjà fixé. Je vous remercie pour vos réponses rapides, j'apprécie.
OriginalL'auteur Marius Popescu
Moi aussi j'avais le même problème.
preventDefault ne fonctionnait pas dans IE.
j'ai donc ajouté le code ci-dessous pour arrêter la propagation
Qu'est-ce que, comme dans IE11, de l'événement.preventDefault est défini, tout ne fait rien? Que faire si il ET returnValue ne sont pas définis?
OriginalL'auteur Sandeep Kamath