Bonsoir,
Nous sommes actuellement en framework 1.1 (donc pas de OnClientClick...) et j'aimerais gérer sur un panier (présenté sous forme de Datagrid) la fonctionnalité suivante :
- lorsque l'utilisateur saisi un code promotionnel, je contrôle par le biais d'un appel ajax la validité dudit code. S'il est valide, je l'applique à mon panier et je recharge la page avec les montants recalculés.
Ca donne cela :
Le problème : à l'exécution j'ai l'impression qu'il recharge d'abord la page, puis exécute le code serveur et donc mon code client est shunté.
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
43
44
45
46
47 <script runat="server"> (...) Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) If Not IsPostBack Then ActiverPromotion.Attributes.Add("onclick", "checkForDiscount();") End If End Sub </script> (...) <script type="text/javascript"> function checkForDiscount() { alert("appel checkForDiscount"); var retour; $.ajax({ type: "GET", url: "../includes/js/AJAX.aspx", data: { ajax: "discount", code: $("#CodePromo").val() }, dataType: "html", success: function(result){ if(result.substring(0, 1) == "#") { $("#erreur").html(result.substring(1)); $("#erreur").show("highlight"); retour = false; } else { $("#promo").html(result); $("#promo").show("highlight"); delay(5000); retour = true; } }, complete: function(){ $("#CodePromo").val(""); } }); return(retour); } </script> (...) <body> (...) <asp:TextBox ID="CodePromo" runat="server"/> <asp:ImageButton ID="ActiverPromotion" ImageUrl="img/btn-activer.jpg" runat="server" OnClick="ActiverPromotion_Click" /> (...) </body>
Quand je regarde le code HTML généré sur le bouton, j'ai ceci :
<input type="image" name="ActiverPromotion" onclick="checkForDiscount(); if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="ActiverPromotion" src="img/btn-activer.jpg">
qui laisse pourtant présager que le checkForDiscount s'exécute bien AVANT le code serveur ? D'ailleurs si je rajoute un delay après l'appel du checkForDiscount, j'ai bien ma msgbox qui s'affiche, mais la suite du code est "omise".
A part gérer mon évènement client sur le onblur de ma zone de saisie, y a-t-il un moyen de lui spécifier d'effecuter la partie Page_ClientValidate uniquement si checkForDiscount() retourne true et ensuite de traitement l'évènement ActiverPromotion_Click ?
Partager