2017-07-02 2 views
0

Je sais que des questions similaires ont déjà été posées auparavant, mais je n'en ai pas vu une avec certaines des exigences ci-dessous.Désactiver le bouton avec jQuery tout en continuant à déclencher l'événement côté serveur

Dans mon balisage, j'ai un div qui contient un champ de saisie et un bouton ASP.NET. Le bouton dispose d'un gestionnaire d'événement OnClick côté serveur qui effectue des actions diverses. travail.

Voici le balisage:

<div id="contactForm"> 
    <input type="text" id="email" runat="server" class="email" name="Email" placeholder="Email *" /> 
    <asp:Button ID="plhButton" class="submit-btn" runat="server" OnClick="Submit_Click" Text="Request Information" /> 
</div> 

et le gestionnaire d'événements:

protected void Submit_Click(object sender, EventArgs e) 
{    
    if (Page.IsValid) 
    { 
     EmailPost(); 
     //Do other stuff 
    } 
} 

Je voudrais également les éléments suivants:

  • Désactiver le bouton pendant 4 secondes
  • Change le texte du bouton est désactivé
  • Revert le texte du bouton après sa réactivée
  • Vérifier la validation

Ceci est mon script pour gérer que:

<script> 
jQuery(document).ready(function ($) { 

    var fewSeconds = 4; 
    $(".submit-btn").click(function() { 
     if (Page_ClientValidate()) { 
      var btn = $(this); 
      btn.prop('disabled', true); 
      setTimeout(function() { 
       btn.prop('disabled', false); 
       btn.prop('value', 'Request Information'); 
      }, fewSeconds * 1000); 

      btn.prop('value', 'Sending...'); 
     } 
    }); 

}); 
</script> 

Tout fonctionne très bien, sauf que la désactivation du bouton empêche mon événement côté serveur de tir. Donc, j'ai ajouté UseSubmitBehavior = « false » à mon bouton:

<asp:Button ID="plhButton" class="submit-btn" runat="server" OnClick="Submit_Click" Text="Request Information" UseSubmitBehavior="false" /> 

Maintenant, l'événement se déclenche du côté du serveur normalement, mais le code dans le script (c.-à-désactiver le bouton, basculer le texte du bouton) ne fonctionne que la première fois que le bouton est cliqué.

Des idées pour faire fonctionner le code de script plus d'une fois?

+1

N'êtes-vous pas soumettez une forme si le code JavaScript est inutile car dès que la page est soumise tout ce qui arrête l'exécution de code. – epascarello

+0

essayez d'utiliser le gestionnaire de scripts dans le code de votre serveur –

+0

@epascarello Bon point! J'ai remplacé '$ (document) .ready' par la fonction' pageLoad() 'et il semble fonctionner maintenant. Merci de me pointer dans la bonne direction :) – mustang888

Répondre

0
<script> 
jQuery(document).ready(function ButtonDisable($) { 
    var fewSeconds = 4; 
     if (Page_ClientValidate()) { 
      var btn = $(this); 
      btn.prop('disabled', true); 
      setTimeout(function() { 
       btn.prop('disabled', false); 
       btn.prop('value', 'Request Information'); 
      }, fewSeconds * 1000); 

      btn.prop('value', 'Sending...'); 
     } 
}); 
</script> 

dans votre code côté serveur d'appel cette fonction javascript en utilisant ScriptManager

protected void Submit_Click(object sender, EventArgs e) 
{    
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "ButtonDisable", "ButtonDisable()", false); 
    if (Page.IsValid) 
    { 
     EmailPost(); 
     //Do other stuff 
    } 
} 

si cela ne vous travaille peut-être utiliser avec le constructeur de chaîne dans votre code côté serveur

+0

Merci pour la suggestion, mais cela n'a pas fonctionné .. lorsque la page se charge, il déclenche automatiquement le formulaire et la validation, de sorte que les messages d'erreur de validation s'affichent par défaut. – mustang888

+0

sinon vous pouvez utiliser le générateur de chaînes dans votre bouton cliquez sur –

+1

Oui, c'est une option, mais j'ai remplacé '$ (document) .ready' par' function pageLoad() 'et c'est ce qui l'a fait. Merci. – mustang888

0

@epascarello m'a fait dans la bonne direction; Je suis passé $(document).ready avec function pageLoad() et qui l'a fait:

<script> 
    function pageLoad(){ 
     var fewSeconds = 4; 
     $(".submit-btn").click(function() { 
      if (Page_ClientValidate()) { 
       var btn = $(this); 
       btn.prop('disabled', true); 
       setTimeout(function() { 
        btn.prop('disabled', false); 
        btn.prop('value', 'Hmm.. Try again'); 
       }, fewSeconds * 1000); 

       btn.prop('value', 'Sending...'); 
      } 
     }); 

    }; 
</script>