72 votes

Sur l'événement de mise en évidence de texte?

Je suis curieux de savoir si quelqu'un sait comment je pourrait déclencher une fonction à exécuter si/une fois que l'utilisateur a terminé la sélection de texte sur la page web? Je voudrais que l'utilisateur puisse sélectionner du texte, et après un court délai(ou immédiatement, à ce stade, il n'a pas grande importance) d'une superposition de bouton s'affiche à côté du texte que l'utilisateur peut ensuite cliquer sur et je revenir en arrière et d'exécuter plus de mon code qui est basée sur la sélection. C'est pour une extension de Firefox.

Un exemple similaire qui je pense serait comme dans IE où vous pouvez sélectionner le texte, puis il ouvre la "accélérateurs web". Je suis à 99% sûr je sais comment je fait de superposition sur le bouton, et d'obtenir la position du texte sélectionné, mais je n'ai aucune idée de comment vérifier pour voir si il n'y a rien sélectionné, sans en faire une sorte de boucle infinie, ce qui semble juste comme une idée terrible.

Merci à l'avance!

EDIT:

//In my overlay.js with the rest of my sidebar code
isTextSelected: function () {   
        var myText = cqsearch.getSelectedText();
        var sidebar = document.getElementById("sidebar");
        var sidebarDoc = sidebar.contentDocument || document;

        var curHighlightedDiv = sidebarDoc.getElementById("testDiv");
        curHighlightedDiv.innerHTML = "Current text selection:" + myText;
    }
};

//In my on firefox load function I added this
document.onmouseup = cqsearch.isTextSelected;

C'est ce que je dois venir avec l'aide de Robert suggestion, et il m'a fallu un peu de temps à apprendre tout au bon endroit, mais il fonctionne très bien! Maintenant, sur la position de mon bouton. Merci une tonne!

84voto

Robert Points 12091

Il n'y a pas de onhighlightext ou quoi que ce soit du genre, mais une solution consisterait à lier onmouseup pour vérifier si du texte est sélectionné si ce n'est pas dans un input / textarea .

modifier

Voici un exemple d'implémentation pour vous. Je n'ai testé cela que dans Chrome / Firefox / IE7. Cela fonctionne aussi dans les entrées.

http://jsfiddle.net/qY7gE/

0voto

Noitidart Points 3818

La solution à l'aide de la mouseup truc n'est pas la bonne solution. C'est un hacky façon et il n'est pas parfait. De moins en moins efficace aussi que vous êtes en train de rattraper mouseups pour trop de la merde.

La vraie manière de le faire dans Firefox addon est d'utiliser addSelectionListener voir ce sujet: Observer pour mettre en avant?

Maintenant, même si l'utilisateur utilise le clavier pour effectuer des sélections, il est pris.

Crédit à Neil pour les pourboires moi hors de l'endroit où le trouver sur MXR

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