2010-12-15 28 views
2

J'essaie de désactiver un bouton de lien pour empêcher l'utilisateur de soumettre plusieurs fois.Bouton de lien désactivé toujours soumis dans le formulaire web asp.net

J'ai vu beaucoup ce genre de questions ici sur le SO, la plupart des gens suggèrent le javascript suivant:

button.disabled = true ou button.disabled = 'disabled'

qui désactive en effet le bouton (le bouton est grisé), mais le problème c'est qu'il est toujours cliquable, et soumet toujours !!

Voici mon code dépouillé:

function ValidateButton(button){
// some other code
button.disabled = true;
button.value = 'Processing...';
}

<asp:LinkButton Text="Submit" ID="btnSubmit" runat="server" onclick="btnSubmitRow_Click" OnClientClick="return ValidateButton(this);"/>

  1. Pourquoi le bouton toujours cliquable, et présente après avoir été désactivé?
  2. Le texte du bouton est toujours « Soumettre » non « Traitement en cours ... ', pourquoi?

Répondre

5

Un contrôle LinkButton est rendu comme un élément a et n'a pas d'attribut disabled ou d'attribut value.

Le code que vous avez fonctionne pour un contrôle Button qui se traduit par input type="button" ou input type="submit", mais pas pour un lien. Pour le rendre inactif, vous devez changer sa couleur, et pour l'empêcher de soumettre vous retourneriez false depuis le gestionnaire d'événements click du côté client. Utilisez l'attribut innerHTML pour modifier le texte du lien.

+0

Merci pour la réponse. –

2

J'ai eu le même problème, désactiver le bouton de lien ne l'empêche pas d'envoyer la demande, vous devez supprimer les événement du bouton de lien lors de la désactivation, il
parfois i remplacé le bouton de lien avec une étiquette qui ont le même texte

0

ajouter à ValidateButton:..

button.onclick = function(){return false;}; 
0

Si le bouton est st Cliquable et la valeur ne change jamais en "Traitement ..." alors êtes-vous sûr de bien cibler le bouton?

Vous pouvez essayer le bouton par ciblage id place:

document.getElementById("btnSubmit ").disabled = true; 
document.getElementById("btnSubmit ").value = 'Processing...'; 

Ensuite, vous saurez à coup sûr que vous manipulez l'élément droit.

Vous pouvez également écrire une modification dans l'événement de soumission du formulaire. Définissez la fonction onSubmit() sur quelque chose comme return false; - de cette façon, l'utilisateur ne peut pas placer le curseur dans un champ de formulaire et le soumettre en appuyant sur Entrée, ce qui contourne le bouton de toute façon.

1

Pour empêcher la publication, ajoutez un return false à votre fonction ValidateButton lorsque vous décidez que le bouton doit être désactivé.

0

Vous pouvez désactiver le LinkButton comme d'habitude (côté client ou côté serveur) et vous devrez modifier votre JavaScript pour qu'il ne fonctionne que si le bouton/lien n'est pas désactivé.Donc, dans votre cas:

<asp:LinkButton Text="Submit" ID="btnSubmit" runat="server" OnClientClick="return ValidateButton(this);"></asp:LinkButton> 

Et dans votre code côté client:

function ValidateButton(button){ 
    if (!button.disabled) { 
     // do work here 
    } 
} 

Si la fonction onClick côté client retourne false, le postback ne se produira jamais.