Désolé pour le temps de réponse mais effectivement je pense que tu as raison. Merci pour ton aide, c'est top !![]()
Désolé pour le temps de réponse mais effectivement je pense que tu as raison. Merci pour ton aide, c'est top !![]()
Bonjour,
Je suis tombé sur une nouvelle difficulté, lorsque mon tableau où mes boutons sont ajoutés via l'appel d'une fonction, mes .click() ne fonctionnent pas.
Lorsque le même code est présent dans le Page_Load, tout fonctionne correctement.
Code peuplement asp:table est exécutée dans le onClick d'un bouton :
Code Jquery :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 // Load contacts in table foreach (Model.User user in listUsers) { TableRow newRow = new TableRow(); newRow.Attributes["id"] = listUsers.IndexOf(user).ToString(); // Login Cell TableCell newCell = new TableCell(); newCell.Text = user.Login; newCell.Attributes.Add("class", "lists"); newRow.Cells.Add(newCell); // Display Name Cell newCell = new TableCell(); newCell.Text = user.DisplayName; newCell.Attributes.Add("class", "lists"); newRow.Cells.Add(newCell); // Display Name Cell newCell = new TableCell(); newCell.Text = user.Mail; newCell.Attributes.Add("class", "lists"); newRow.Cells.Add(newCell); newCell.Attributes.Add("class", "lists"); newRow.Cells.Add(newCell); // Action Cell newCell = new TableCell(); // Add ADD button Button addButton = new Button(); addButton.Text = "Ajouter"; addButton.ID = String.Format("add_{0}", listUsers.IndexOf(user).ToString()); addButton.Click += new EventHandler(addButton_Click); addButton.CssClass = "inputAdd"; newCell.Controls.Add(addButton); newCell.Attributes.Add("class", "lists"); newRow.Cells.Add(newCell); // Add row to table userSearchList.Rows.Add(newRow); }
Je cherche depuis quelque temps pour comprendre pourquoi le clic ne fonctionne pas ... En fait il est bien détecté mais il me relance ma page alors qu'il devrait passer dans addButton_Click.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $('input[type="submit"]').each(function() { if ( $(this).is(".inputAdd")) { $(this).hide().after('<button>').next().button ({ icons: { primary: 'ui-icon-plus' }, text: false }).click(function(event) { event.preventDefault(); $(this).prev().click(); return false; }); } });
Merci pour toute l'aide que vous pourrez m'apporter.
Est-ce que tu fais un postback asynchrone quand tu appelles tes fonctions (tu utilises un updatepanel) ?
Non rien de tout ça ...
Je fais ça directement dans un asp:table, ceci est mon entête :
Je le peuple avec le code plus haut en fonction du nombre de ligne que je récupère via une autre fonction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <asp:Table ID="usersList" runat="server" GridLines="None" CellPadding="5"> <asp:TableHeaderRow> <asp:TableHeaderCell>Login</asp:TableHeaderCell> <asp:TableHeaderCell>Nom complet</asp:TableHeaderCell> <asp:TableHeaderCell>Supprimer</asp:TableHeaderCell> </asp:TableHeaderRow> </asp:Table>
Je ne le fais pas que dans ce cas là. A un autre endroit, j'ai deux boutons par ligne, le premier fonctionne mais pas le second alors qu'ils sont générés de la même façon.
J'ai regardé le code via Firebug et je me suis aperçu qu'il était surchargé au niveau de sa classe ce qui pourrait expliquer pourquoi le .Click() ne fonctionne pas ...
Premier bouton qui fonctionne:
Second bouton qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <input id="MainContent_admin_086baf58-9040-49f8-a0c2-2d476a9ab61c" class="btnEdit" type="submit" value="Editer" name="ctl00$MainContent$admin_086baf58-9040-49f8-a0c2-2d476a9ab61c" style="display: none;"> <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only" role="button" aria-disabled="false" title="">uiButton=Object { element={...}, uuid=11, eventNamespace=".button11", more...}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <input id="MainContent_cancel_086baf58-9040-49f8-a0c2-2d476a9ab61c" class="btnCancel ui-button ui-widget ui-state-default ui-corner-all" type="submit" value="Annuler" name="ctl00$MainContent$cancel_086baf58-9040-49f8-a0c2-2d476a9ab61c" role="button" aria-disabled="false" style="display: none;">uiButton=Object { element={...}, uuid=0, eventNamespace=".button0", more...} <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only" role="button" aria-disabled="false" title="">uiButton=Object { element={...}, uuid=12, eventNamespace=".button12", more...}
J'ai fait un peu debug avec Firefox pour voir ce qui se passait lors du click sur le bouton. Dans le cas où je peuple mon tableau via une fonction, j'ai ceci dans le html :
J'ai donc mes deux boutons, le premier permet de faire référence à celui que j'ai créé en C#. Lors du clic, je passe dans :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <input id="MainContent_Spinner1_add_0" class="inputAdd" type="submit" value="Ajouter" name="ctl00$MainContent$Spinner1$add_0" style="display: none;"> <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-state-focus" role="button" aria-disabled="false" title="">uiButton=Object { element={...}, uuid=9, eventNamespace=".button9", more...}
Je passe bien dans le .Click() et j'ai vérifié que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 if ( $(this).is(".inputAdd")) { $(this).hide().after('<button>').next().button ({ icons: { primary: 'ui-icon-plus' }, text: false }).click(function(event) { event.preventDefault(); $(this).prev().click(); return false; });fait bien référence à mon champ input. Donc en toute logique le problème vient du côté C# ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part $(this).prev().click();
Un peu plus haut dans ma page j'ai le même mécanisme qui est initialisé dans le Page.Load et là tout fonctionne correctement ...
En faite tu veux dire que tu fais bien un postback sauf que la fonction addButton_Click n'est jamais appelé.
Pour qu'une méthode attachée à un événement soit bien appeler à chaque chargement elle doit être rattachée à chaque chargement, ce morceau de code doit donc être appeler à chargement de ta page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part addButton.Click += new EventHandler(addButton_Click);
J'ai compris que ça venait de ça du coup j'ai pu corriger le problème.
Merci !
Partager