Après avoir cliqué sur le texte sélectionné, la sélection de fenêtre ne donne pas la plage mise à jour

Après un double-clic, la plage de sélection peut être obtenue correctement sur l’événement onclick, mais lorsque je clique à nouveau sur le texte sélectionné, la plage de sélection mise à jour doit être renvoyée par la sélection de la fenêtre, mais cela ne se produit pas. Quelqu’un peut-il me dire s’il s’agit d’un bogue dans la sélection javascript ou s’il l’a fait de cette façon? Et quelle pourrait être la solution pour obtenir la plage mise à jour en dehors de la timer.

Hello world
Selected text :

code javascript:

 function yourFunction() { if (window.getSelection) { var selectionRange = window.getSelection(); $('.status').text(selectionRange.toSsortingng()); } } $('#xyz').click(function () { $('.status').text('Mouse click'); yourFunction(); }) 

Exemple ici

Votre violon fonctionne très bien. Mais oui, parfois, lorsque vous effectuez des sélections en succession rapide, le clic n’est pas enregistré.

Le problème réside vraiment dans la façon dont vous l’avez implémenté en click sur l’ input texte elle-même. Un événement de clic est généré lorsqu’un mouseup suit un mousedown . Une sélection se produit lorsque vous déplacez la souris puis faites glisser la souris, puis la souris .

Si vous séparez la récupération de la sélection, ce problème ne se produira pas.

Voir ce violon mis à jour: http://jsfiddle.net/zRr4s/21/

Ici, la récupération de la sélection s’effectue à l’aide d’un clic de bouton, au lieu de l’entrée elle-même.

c’est-à-dire au lieu de:

 $('#xyz').click(function (e) { ... 

en utilisant ceci:

 $('#btn').click(function () { ... 

où, btn est:

  

J’espère que cela pourra aider.

Mise à jour :

Si vous insistez pour que l’événement ne soit géré que sur l’entrée, alors l’écoute de la souris est la meilleure option:

Voir ce violon: http://jsfiddle.net/zRr4s/22/

 $('#xyz').on("mouseup", function (e) { ... 

Mise à jour 2 :

Pour gérer votre besoin de clic en contexte, vous devez d’abord effacer la sélection. Pour que cela se produise, vous devrez gérer Mousedown . Donc, cela ira à l’encontre de votre objective d’avoir un seul gestionnaire. En tous cas,

Vous avez mis à jour le violon: http://jsfiddle.net/zRr4s/29/

Et voici comment vous le faites:

 $('#xyz').on("mousedown", function () { clearTheSelection(); }); 

clearTheSelection est une autre fonction:

 function clearTheSelection() { if (window.getSelection) { if (window.getSelection().empty) { // Chrome window.getSelection().empty(); } else if (window.getSelection().removeAllRanges) { // Firefox window.getSelection().removeAllRanges(); } } else if (document.selection) { // IE? document.selection.empty(); } } 

Le code complet de la fonction ci-dessus, tiré de cette réponse: https://stackoverflow.com/a/3169849/1355315

J’espère que cela règle tous vos problèmes.