2010-05-20 8 views
0

J'ai 2 boîtes de texte asp.net dans un panneau de mise à jour. Les deux contrôles de zone de texte ont javascript attachés à autotab dans le champ suivant et permettent uniquement l'entrée numérique. Lorsque j'entre des données dans le premier champ et que j'appuie sur Entrée, le focus passe au champ suivant et le champ obligatoire fieldvalidator du second champ affiche son message d'erreur "* required", même si je viens d'entrer dans le champ. Comment puis-je empêcher le validateur de se déclencher lorsque j'entre pour la première fois dans la zone de texte?ASP.NET requis validateur de champ tir sur focus dans firefox

Je dois également mentionner que les deux zones de texte sont dans un pied de page gridview.

Voici le code:

<asp:TextBox ID="add_ISBN" runat="server" Columns="14" MaxLength="17" CssClass="focus" /> 
<asp:TextBox ID="add_Qty" runat="server" Columns="4" MaxLength="4" /> 
<asp:RequiredFieldValidator ID="rfvQty" ControlToValidate="add_Qty" ErrorMessage="* required" ForeColor="Red" Display="Dynamic" EnableClientScript="true" ValidationGroup="Add" runat="server" /> 

Dans le codebehind:

add_ISBN.Attributes.Add("onkeydown", "return isbnCheck(event, '" & add_Qty.ClientID & "')") 

Et le javascript:

function isbnCheck(e, id) { 
    e = e || window.event; 
    var key = e.which || e.keyCode 

    if (validIsbnChars.indexOf(parseInt(key, 10)) >= 0) { 
     return true; 
    } else { 
     if (key == 13) { 
      var nextfield = document.getElementById(id); 
      if (nextfield) nextfield.focus(); 
      return false; 
     } 
     if (e.preventDefault) e.preventDefault(); 
     e.returnValue = false; 
     return false; 
    } 
} 

Le javascript permet seulement un sous-ensemble de caractères valide, et si la l'utilisateur appuie sur entrer, met le focus sur le champ suivant.

+0

Vous aurez besoin de publier un balisage et votre script afin que nous puissions vous aider. –

Répondre

0

J'ai réussi à résoudre ce problème en joignant le javascript à l'événement onKeyPress au lieu de onKeydown.

add_ISBN.Attributes.Add("onkeydown", "return isbnCheck(event, '" & add_Qty.ClientID & "')") 
2

Je ne sais pas exactement pourquoi le bogue se produit, mais vous pouvez probablement créer une solution de contournement en utilisant le client-side validation mini-api.

Recherchez l'élément validateur sur la page en faisant un document.getElementById(), puis définissez l'indicateur isvalid sur true sur le validateur lorsque vous tabulez dans le champ.

Vous pouvez également appeler le ValidatorEnable(validatorElement, false) pour le désactiver lorsque vous êtes sur le terrain, puis le réactiver avec ValidatorEnable(validatorElement, true) lorsque vous quittez l'onglet.

+0

Merci womp. S'il s'avère qu'il n'y a pas d'autre moyen, je ferai probablement quelque chose comme ça. –

Questions connexes