2011-08-17 3 views
0

J'ai un GridView ASP.NET avec des cases à cocher dans un ItemTemplate. Je dois simplement vérifier (avec jQuery) si l'un d'eux est sélectionné pour accomplir autre chose. En utilisant le code ci-dessous rien ne se passe. Si je donne une ID aux CheckBox, cela fonctionnera mais seulement la première case à cocher.Cases à cocher dans un gridview ItemTemplate avec jQuery

Voici le GridView:

<asp:GridView ID="gvData" runat="server" AutoGenerateColumns="false" SkinID="GridView" 
      DataKeyNames="Check Config"> 
      <Columns> 
       <asp:BoundField HeaderText="Schedule ID" DataField="Check Config"></asp:BoundField> 
       <asp:BoundField HeaderText="Check Configuration" DataField="Check Configuration" /> 
       <asp:BoundField HeaderText="Shift" DataField="Shift" /> 
       <asp:BoundField HeaderText="Earliest Time" DataField="Earliest Time" /> 
       <asp:BoundField HeaderText="Alarm Time" DataField="Alarm Date" /> 
       <asp:BoundField HeaderText="Disposition" DataField="Disposition" /> 
       <asp:TemplateField HeaderText="Disable"> 
        <ItemTemplate> 
         <asp:CheckBox runat="server" CssClass="alarmSelections" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

Et voici le jQuery (modifié pour plus de précisions):

//if some or all rows are selected, create the html button "btnEnterComment" 
      $('[id$="gvData"]').change(function() { 
       //check to see if the button already exists 
       if ($('#divButtonHolder').hasClass('classFlag')) { 
        return; 
       } 
       else { 
        if ($('.alarmSelections:checked').length) { 
         $('#divButtonHolder').html('<input type="button" id="btnEnterComment" value="Disable Marked Alarms" style="border: 2px solid green; background-color: #fff;height: 25px; cursor: hand;"></input>'); 
         $('#divButtonHolder').addClass('classFlag'); 
        } 


       } 
+0

Où est 'divButtonHolder'? – naveen

Répondre

2

Essayez:

// evaluates to true if one or more 
// 'alarmSelections' checkboxes have been checked 
if($('.alarmSelections:checked').length) { 
    ... 
+0

J'ai ajouté/modifié le code (voir ci-dessus) après la mise en œuvre de votre suggestion. Cela ne fonctionne toujours pas et je me demande si j'ai foiré ailleurs dans la fonction? "gvData" est l'identifiant GridView. – Matt

0

alarmSelections retourne un tableau de cases à cocher.

Vous devez utiliser .each (function() {code}) et faire une boucle pour voir si quelque chose a été vérifié.

+0

Le post de karim fonctionne également ... –

1

donner votre case à cocher un ID chkABC

accéder à toutes les cases à cocher en utilisant la syntaxe ci-dessous

$("[ID*=chkABC]").each(function(){ 
//use this. any property to play with each checkbox 
}) 

lorsque DataGrid est rendu tous les ids contrôle sont générées dynamiquement. La syntaxe [ID * = chkABC] sélectionnera tous les contrôles se terminant par le nom chkABC.

sachant que cette syntaxe est la clé pour utiliser jquery avec le type de contrôle repeater/dataagrid. J'ai beaucoup lutté plus tôt pour trouver cette solution. j'espère que vous ne lutterez plus.

+0

J'ai ajouté toute la fonction jQuery pour plus de clarté. Je vois ce que vous dites et je pense que je suis en train de me tromper quelque part avant cela maintenant. – Matt

0
$('[id$="gvData"]') 

Si je suis le cerveau analyse correctement, il est à la recherche d'un élément rendu avec un attribut qui ressemble à ceci:

<sometag id$="gvData"> 

Je ne suis pas familier avec la notation « id $ » vous utilisez dans le sélecteur - le "$" est-il un caractère générique ou un autre caractère spécial?

Aussi, je ne pense pas que votre GridView sera réellement rendu avec un id de "gvData". ASP.NET le rendra probablement comme "ct100_gvData", ou quelque chose de similaire, pour assurer l'unicité de la page.

En général, quand j'ai besoin de faire référence à un contrôle généré ASP dans jquery, mon code ressemble à ceci:

$('#<%= gvData.ClientID %>') 

Cela devrait résoudre à la valeur « ct100_gvData », ou tout ce munged-ensemble ID ASP.NET affecte le contrôle lorsqu'il est rendu.