Pas possible en 1.1
Ca marche pour toi en faisant ca ? :
sur ta page t'ajoutes le script suivant :
<script type="text/javascript">
function onButtonClick(sender)
{
if (sender != null)
{
if (sender.disabled == null || sender.disabled == false)
{
__doPostBack(sender.id,'');
sender.disabled = true;
}
else
{
alert('inactif');
}
}
}
</script>
et tu fais ton linkbutton comme suit :
<asp:LinkButton ID="LinkButton1" runat="server" Text="Valider" OnClientClick="onButtonClick(this)" OnClick="LinkButton1_Click" />
Si au 2ème click t'as une boite de dialogue qui s'affiche c'est que c'est bon.
xamage, il est en 1.1 donc OnClientClick n'existe pas
Grrrr j'avais oublié de détail
fais ch*** ce 1.1...
Et on peut pas adapter mon bout de code en mettant dans le form_load :
btn.attributes.add('onclick', 'onButtonClick(this)');
Et coté UI un linkbutton tout simple :
<asp:LinkButton ID="LinkButton1" runat="server" Text="Valider" OnClick="LinkButton1_Click" />
??
Tu voudrais pas lire le topic depuis le début?
je l'ai lu depuis le début.
ca marche. le bouton se grise et redevient clickable une fois que le postback est terminé.
Ca marche avec des appuis vraiment intensifs?
Car chez moi, ton exemple provoque des erreurs Javascript mais paraît marcher sur une utilisation moins intensive.
Malgré une bonne intention, je ne pense pas que ta solution soit exploitable pour le moment.
Allez!!!! On se motive les gars!!! ^^
Des erreurs javascript dis tu ?
Quoi exactement ?
Tu les as quand tu cliques comme un fou ou tout le temps ?
J'ai essayé en faisant le fameux "double click" si néfaste mais cher à beaucoup d'utilisateurs, et seul le premier click était pris en compte (comportement attendu).
Après, une fois que le bouton est grisé de toute facon on ne peut plus cliquer...
Par contre, j'avais mis un Sleep(5000) pour simuler un temp de traitement coté serveur de 5 secondes, mais je n'ai pas essayé sans mettre de sleep().
Pour info le bout de javascript que j'ai écris plus haut ne fonctionnera que dans un formulaire simple. Si tu es dans WebUserControl y a une petite retouche a faire, mais je pense pas que ce soit ton cas. Idem si ta page a une master page (mais c'est pas possible en 1.1...)
Pour l'instant j'ai pas d'autre idée (a part l'extender ajax, mais ce n'est peut etre pas possible en 1.1)
J'ai une mauvaise nouvelle, c'est un WebUserControl :
Comment faire? ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part public class EnvoisDemande : System.Web.UI.UserControl
ASP.Net renome tes controles des lors qu'ils sont dans un ContentPlaceHolder (en 2.0 quand tu as une MasterPage), ou quand tu es dans un user control. Ceci au cas ou tu aurais 2 user controls différents contenant chacun un bouton ayant le meme id et que tu placerais ces 2 UC dans la meme Form, du coup tu aurais sur le meme formulaire 2 boutons ayant le meme Id, et ca c'est pas possible.
Du coup ASP.net renomme tes controls en les préfixant selon le nom de leur conteneur. Exemple, mon user control s'appelle WucToto et contient un bouton btnToto, asp.net genera l'id suivant pour le bouton : MaForm$WucToto$btnToto.
Essaye ca :
Y a peut etre qques retouches a faire...
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 <script type="text/javascript"> function onButtonClick(sender) { if (sender != null) { if (sender.disabled == null || sender.disabled == false) { var postFunction = "<%=this.ClientID%>"; var reg = new RegExp("(_)", "g"); postFunction = postFunction.replace(reg, "$") postFunction = postFunction + "$" + sender.id; __doPostBack(postFunction,'') sender.disabled = true; } else { alert('bouton inactif'); } } } </script>
PS :
Je fais une RegEx pour remplacer les '_' par des '$' car chez moi, <%=this.ClientID%> génère un nom du 'Ctl00_PageContent_WucToto', or pour déclencher l'évènement il faut invoquer (dans mon cas) 'Ctl00$PageContent$WucToto$btnToto'
Oui y a moyen de simplifier, j'avais fais ca y a un petit moment déjà, mais une chose ne change pas, javascript et moi ca fait 2
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager