2009-10-02 6 views
0

Je veux être en mesure de désactiver la fonctionnalité de clic d'un bouton radio afin que je puisse le décocher. Cependant, lorsque je le désélectionne, le clic se déclenche toujours et le résultat final est une radio qui désélectionne (et modifie d'autres éléments de page en conséquence), puis revérifie à cause de l'événement onclick.Comment désactiver le gestionnaire de clic sur un nœud YUI?

var clickFunction = function(e, radio, p){ 
     var checked = radio.get("checked"); 
     radio.set("checked", !checked); 
    }; 
    this.controlNode = Y.Node.create("<input id='" + id + "' onclick='function(e){return false;}' type='radio' name='" + parent.id + "'>"); 
    this.label = Y.Node.create("<label for='" + id + "'>" + display + "</label>"); 
    Y.on("mousedown", clickFunction, this.label, this.controlNode, parent.controlNode); 
    parent.controlNode.appendChild(this.controlNode); 
    parent.controlNode.appendChild(this.label); 

Le gestionnaire d'événements mousedown est utilisé, comme il est pour les gros doigts sur un (fenêtres) écran tactile, et le mouvement entre mousedown et mouseup ne constitue pas un clic. (Tout au long d'un tapotement avec le doigt, le doigt augmentera et diminuera sa surface sur l'écran, et un écran non multitouch placera le curseur à la moyenne des points de contact, un léger roulis déplacera le curseur). La souris baisse vers le haut et entraîne une évaluation des dépendances et affiche/cache les autres contrôles sur une page.

Je veux simplement annuler; et je pense qu'avoir une autre option de réinitialisation est moins que satisfaisant pour mon usage particulier. Si rien d'autre ne se produit ici, je devrai l'utiliser.

+0

Cela m'a complètement troublé. –

+0

@Roatin - ne vous inquiétez pas. J'ai eu du mal à faire en sorte que cette question soit suffisamment claire pour répondre. C'est un problème étrange - un seul élément doit être sélectionné, donc une radio est appropriée. Cependant, en raison de la propagation d'un événement, il ne suffit pas d'effacer la variable "checked", car les événements ont besoin de bulles pour que les autres auditeurs sachent que le contrôle a changé ... – Stephen

Répondre

2

Essayez la halt method sur la façade d'événement transmis à votre gestionnaire d'événements:

this.controlNode = Y.Node.create("<input id='" + id + "' type='radio' name='" + parent.id + "'>"); 
this.controlNode.on("click", function(e) { e.halt(); }); 

Cela arrêtera la propagation de l'événement et le comportement d'événement par défaut (le clic).

+0

Une fois que vous avez vos paramètres en ordre, je peux accepter:)... presque. La chose intéressante est que même avec le paramètre id après la fonction, cela ne fonctionnera pas, car mon contrôle d'entrée est aucun affichage, et le clic est sur l'étiquette (bouton-style). Donc, le gestionnaire de clic doit être sur cela. Puisque ce n'est qu'un contrôle, vous pouvez faire Y.on ('click', function (e) {...}, this.label); ou encore this.label.on ('click', function (e) {...}) – Stephen

+0

Votre entrée radio n'est pas affichée !? –

+0

Oh, oui, l'ordre des paramètres du gestionnaire d'événements est passé de YUI 2 à 3. –

Questions connexes