2010-04-16 6 views
2

Je cherche un moyen pour les utilisateurs de choisir l'une des deux options (force ou faiblesse) pour une liste de qualités.en utilisant la case à cocher comme bouton radio

pour par exemple:

    strength  weakness not applicable 
1. Communication 
2. Punctuality 
    ... 

bouton radio me permet de sélectionner une force ou une faiblesse. Cependant, je veux que l'utilisateur vérifie seulement les qualités qui s'appliquent et si un utilisateur sélectionne accidentellement une qualité il n'y a aucun moyen d'annuler la sélection pour un bouton radio à moins qu'un troisième bouton radio ne soit pas applicable ou que l'utilisateur rentre la page. Je me demandais s'il y avait un moyen d'obtenir la flexibilité d'une case à cocher (cocher/décocher) en plus de désactiver ou d'activer l'autre case lorsque l'une d'elles est cochée ou décochée au lieu d'utiliser trois boutons radio.

Je ne pense pas avoir déjà vu ce comportement, alors je me demande s'il existe une façon plus élégante de le faire. Je suis ouvert à d'autres idées pour obtenir la même fonctionnalité. Utiliser une case à cocher comme bouton radio n'était qu'une idée.

merci beaucoup.

Répondre

14

Solution basée sur javascript

function SetSel(elem) 
{ 
    var elems = document.getElementsByTagName("input"); 
    var currentState = elem.checked; 
    var elemsLength = elems.length; 

    for(i=0; i<elemsLength; i++) 
    { 
    if(elems[i].type === "checkbox") 
    { 
     elems[i].checked = false; 
    } 
    } 

    elem.checked = currentState; 
}​ 

<input type="checkbox" class="chkclass" onclick="SetSel(this);" /> 
<input type="checkbox" class="chkclass" onclick="SetSel(this);" /> 
<input type="checkbox" class="chkclass" onclick="SetSel(this);" /> 
<input type="checkbox" class="chkclass" onclick="SetSel(this);" /> 

Working Demo

Solution basée sur jQuery

$(function(){ 
    $("input:checkbox.chkclass").click(function(){ 
     $("input:checkbox.chkclass").not($(this)).removeAttr("checked"); 
     $(this).attr("checked", $(this).attr("checked"));  
    }); 
});​ 

<input type="checkbox" class="chkclass" /> 
<input type="checkbox" class="chkclass" /> 
<input type="checkbox" class="chkclass" /> 
<input type="checkbox" class="chkclass" /> 

Working Demo

+0

Sentez-vous que je devrais probablement souligner que cette solution exigera jQuery pour travailler, et il n'y a aucune indication que le demandeur question veut (ou est capable) d'utiliser jQuery. – GlenCrawford

+1

@RoseOfJericho: Le tag 'ajax' dans le message original signifie que poster est prêt à utiliser une extension sur JavaScript mais ne sait pas lequel. Parce que AJAX n'a ​​rien à voir avec une telle fonctionnalité, jQuery est ce dont il a besoin – abatishchev

+1

@abatishchev: Je suis complètement d'accord. J'ai seulement soulevé mon commentaire afin que l'affiche n'essaie pas d'adapter le code ci-dessus à ses besoins en pensant que c'est JS à la vanille et je me demande pourquoi ça ne marche pas. – GlenCrawford

5

Vous ne devez pas utiliser les cases à cocher les boutons radio (ou vice-versa): cela est incompatible avec le modèle mental de l'utilisateur, il confond les gens.

Ceci est un problème sans solution idéale, mais votre suggestion initiale d'avoir une option "non applicable" dans le cadre d'un groupe de 3 boutons radio est assez courante. Si vous présélectionnez l'option "non applicable" par défaut et que vous la désactivez visuellement (par exemple, si elle est grise), du point de vue de l'utilisateur, ce sera presque comme s'il n'y avait que deux options, mais elles peuvent récupérer si elles en sélectionnent accidentellement un et que vous voulez le "désélectionner".

4

ceci est une forme correcte, « vérifié » est un propriétaire et non attribut

$(function(){ 
     $("input:checkbox.chkclass").each(function(){ 
     $(this).change(function(){ 
      $("input:checkbox.chkclass").not($(this)).prop("checked",false); 
      $(this).prop("checked", $(this).prop("checked"));  
     }); 
     }); 
    }); 
Questions connexes