2008-11-16 3 views
0

Il semble que la commande XUL et cliquez sur les événements sont quelque peu différents.Comment faire pour appuyer sur le bouton de la souris à partir d'un événement de commande dans XUL?

Bien que ma fonction ne soit appelée lors de l'utilisation de l'événement commande , l'objet événement ne contient pas la propriété bouton .

Ma question est: Comment puis-je détecter quel bouton de la souris a été enfoncé sans utiliser l'événement click?

Le code le plus simple qui peut démontrer mon problème:

<?xml version="1.0"?> 
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> 

<window id="yourwindow" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
<script language="JavaScript"> 
    var showMeTheButton=function(e) 
    { 
     alert(e.button); 
    } 
</script> 
<button onclick="showMeTheButton(event)" label="Click me with onclick"></button> 
<button oncommand="showMeTheButton(event)" label="Click me with oncommand"></button> 
</window> 

Répondre

2

La principale chose à garder à l'esprit est que oncommand est tiré pour toute action qui se traduit par une activation du bouton qui peut inclure en appuyant sur l'espace barre lorsque le bouton a le focus, en utilisant un raccourci clavier attaché au bouton, ou en cliquant sur le bouton avec la souris. Le gestionnaire d'événements n'est pas vraiment censé se préoccuper de comment il a été appelé, mais seulement que c'était le cas. (Je pense que c'était une décision consciente de garder une interface utilisateur cohérente.)

Les seules actions qui aboutissent à la propriété bouton étant ajoutée à l'objet de l'événement sont onclick, ondblclick, onmousedown et onmouseup. Vous remarquerez que même si vous désactivez votre bouton onclick, l'événement se déclenche toujours, alors qu'avec oncommand, il ne le sera pas. Pour obtenir la même fonctionnalité que oncommand, vous devez gérer vous-même les événements onclick et onkeydown tout en vous assurant que le bouton est toujours activé. Vous pourriez également être en mesure de créer un bouton personnalisé en utilisant XBL qui ont des événements personnalisés comme onleftclick ou onmiddleclick qui retombent alors à oncommand si elles ne sont pas définies - mais je ne l'ai pas essayé.

Questions connexes