Question

Comment obtenir les identifiants de toutes les cases à cocher générées par une liste de cases à cocher, dont la source de données est datatable?

Je pense que je dois utiliser le " OnDataBinding " la liste des cases à cocher, mais je ne vois pas en quoi cela va m'aider.

J'utilise C #

Je ne pense pas qu'il soit possible d'obtenir l'identifiant de toutes les cases à cocher générées par la liste de cases à cocher. Je pense donc que l'utilisation de la méthode moo est la bonne chose à faire.

Des idées?

Merci

Était-ce utile?

La solution

Idéalement, vous voudriez simplement attacher les gestionnaires d’événements click à toutes vos listes de cases à cocher dans l’événement domReady, ce qui créera une fonction beaucoup plus simple avec MooTools. Toutefois, vous pouvez conserver votre code tel quel si vous préférez et simplifier un peu vos 2 fonctions.

function ToggleSelection(ctrl, sender) {
  var checkboxes = $(ctrl).getElements('input[type=checkbox]');
  checkboxes.set('checked', sender.checked);
}

function ToggleSelectAll(ctrl, sender) {
  var fAllChecked = ($(sender).getElements('input:checked').length == $(sender).getElements('input[type=checkbox]').length)
  $(ctrl).set('checked', fAllChecked);
}

Vous pouvez définir les propriétés de l'ensemble de votre tableau ELements en une fois, vous n'avez pas besoin de les parcourir en boucle. Dans la deuxième fonction, je vérifie le nombre d'éléments vérifiés par rapport au nombre total de cases à cocher et, si elles correspondent, cela signifie qu'elles sont toutes vérifiées.

Autres conseils

Utilisez-vous VB ou C # .. merci de taguer en conséquence

Vous pouvez avoir une liste ou une chaîne appelée strchklist

VB.NET

For Each li In CheckBoxList1.Items 
       If li.Selected Then 
            strchklist += li.Id 
      End If 
  Next 

C #

foreach (ListItem li in CheckBoxList1.Items){ 
       If li.Selected
            strchklist += li.Id ;}

Le <asp:ListItem> n’est pas vraiment un contrôle lui-même n’a donc pas d’ID. Si vous souhaitez y accéder dans le script client, ajoutez un nouvel attribut que vous pouvez référencer. (oui, pendant OnDataBinding) Rappelez-vous qu’ils ne sont cependant pas conservés dans ViewState!

Qu'est-ce que vous essayez d'accomplir exactement? Peut aider à élaborer quelque peu.

Réponse complètement différente ...

La CheckBoxList est un peu bizarre ... contrairement à d’autres contrôles, elle n’a pas vraiment de correspondance logique avec une construction HTML évidente. Il affiche en réalité plusieurs cases à cocher avec des identifiants dérivés. Ces identifiants semblent être générés sous la forme CheckBoxList.ClientID + & "_ &"; + ItemIndex .

Vous pouvez le vérifier en consultant la source de la page. En interne, il semble que l'ID du contrôle de case à cocher individuel soit uniquement son index, puis il est rendu avec CheckBoxList en tant que NamingContainer. Vous pouvez utiliser Reflector pour voir comment le contrôle CheckBoxList rend la sortie.

Toujours un bon endroit pour jQuery. Simplement plus facile maintenant, vous connaissez les identifiants.

Je me suis réveillé ce matin et j'ai pensé à cela (cblUSEquities est une liste de cases à cocher)

cblUSEquities.Attributes.Add("onclick", "javascript:alert('Clicked');");

Ceci ajoute l'alerte à la table générée par la liste de cases à cocher. Une chose à noter est que l'alerte apparaît deux fois si je clique sur le texte de la case à cocher et une fois si je coche la case à cocher. Je pense que cette solution fonctionnera pour moi.

BTW, je n'ai jamais pensé que le code ci-dessus fonctionnerait ...

P.S. Répondant à ma propre question parce que je voulais écrire du code, ce que je ne peux pas utiliser avec la zone de commentaire.

Dans l’esprit de StackOverFlow, je suis arrivé à quelque chose qui fonctionne dans mon scénario mais la description de la question est différente? Que fais-je? Modifiez la question et marquez-la comme réponse?

J'ai pu faire cela en utilisant mootools et voici le code.

function ToggleSelection(ctrl, sender)
{
    var cblCtrl = $(ctrl);
    var Allcbs = cblCtrl.getElements('input');

    for(var i=0; i<Allcbs.length; i++)
        Allcbs[i].checked = sender.checked;
}

function ToggleSelectAll(ctrl, sender)
{
    var AllTrueCount = 0;
    var cblCtrl = $(ctrl);
    var Allcbs = sender.getElements('input');

    for(var i=0; i<Allcbs.length; i++)
        if(Allcbs[i].checked)
            AllTrueCount++;

    if(AllTrueCount == Allcbs.length)
        cblCtrl.checked = true;
    else
        cblCtrl.checked = false;
}

Code C # qui appelle les fonctions javascript

//Binding event to the checkbox list
cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID));

//binding event to the select all checkbox
chkAllUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelection('{0}', this);", cblUSEquities.ClientID));

Comme il s'avère que je n'ai pas besoin de connaître l'identifiant de toutes les cases à cocher générées par la liste des cases à cocher. J'ai pu ajouter le code javascript onclick à ces cases à cocher en regard de cette ligne

cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID));

Qui ajoutera l'événement onclick à la table générée par la liste de cases à cocher.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top