2009-11-28 9 views
1

Je suis en train d'attraper des événements de clic de souris sur des éléments de zone de texte.Un problème concernant MouseEvents

Étant donné que je dois arrêter la propagation après le traitement de l'événement, le curseur ne sera pas défini comme d'habitude lorsque nous utiliserons les zones de texte avec la touche du milieu. Mais j'ai besoin de le régler avant de faire d'autres travaux, j'ai donc essayé d'envoyer un événement souris manuellement.

Mon code est:

var evt = document.createEvent("MouseEvents"); 
evt.initMouseEvent("click", true, true, window, 1, origEvt.screenX, origEvt.screenY, 
    origEvt.clientX, origEvt.clientY, false, false, false, false, 0, null); 
origEvt.target.dispatchEvent(evt); 
... 

Ce code tente de simuler un clic gauche sur le même élément à la même position. L'événement envoyé peut être intercepté, mais le curseur n'est pas défini.

Quelqu'un pourrait-il me guider comment faire cela?

+0

Y at-il une raison pour laquelle l'utilisateur ne doit pas cliquer pour définir la position du curseur? Ce serait un comportement attendu et il y a rarement une bonne raison de changer le comportement attendu. –

+0

@Jonathan: Ceci est pour une extension firefox, et quand l'utilisateur clique sur un élément d'entrée, un caractère sera inséré là, indépendamment de la position du curseur. –

Répondre

1

Les événements falsifiés ne provoquent pas d'actions par défaut. Vous devez les reproduire vous-même.

Dans ce cas, vous devez utiliser selectionStart et selectionEnd pour définir la position de mise au point d'entrée sur la zone de texte. Cependant obtenir les offsets de chaîne appropriés à partir d'un emplacement de la souris serait plutôt difficile. Il n'est pas clair quel est le but derrière ce que vous essayez de faire, mais vous devrez trouver une autre solution de contournement. Peut-être que vous pourriez permettre à l'action par défaut de se produire, mais ensuite flouter la zone de texte après l'avoir fait et la recentrer plus tard? Vous pouvez également vous rappeler les propriétés selectionStart/selectionEnd juste après le clic pour régler le focus à tout moment ultérieur si la position peut changer entre-temps.

+0

Merci pour la réponse. Mais je ne peux pas permettre que l'action par défaut se produise car sous Gnome, le clic du milieu va coller quelque chose à la fois. Je vais devoir trouver un autre moyen alors ... –

+0

Horrible idée: permettre à la pâte d'avoir lieu, mais ensuite ramener la zone de texte à sa valeur précédente et définir les points de sélection à l'endroit où la valeur a été modifiée? – bobince

+0

Oui, c'est vraiment horrible ... Merci. J'ai trouvé un autre moyen. –

Questions connexes