2011-01-04 4 views
3

J'essaie actuellement de m'assurer qu'un nombre saisi dans une zone de texte est divisiblement de 1,25 ou 1,5. La façon dont je décide de la météo pour modifier le nombre de 1,25 ou 1,5 dépend de ce qui est dans une autre liste déroulante. Par exemple: Si l'index sélectionné d'un DDL est 1, je modise par 1.5, si c'est 2 I mod par 1.25.ASP.NET - Validateur personnalisé avec Dynamic ErrorMessage

Cependant, j'ai besoin d'afficher à l'utilisateur pourquoi l'erreur a été lancée. Le message d'erreur du validateur personnalisé doit être quelque chose comme "Numéro doit être divisible par 1,25" ou vice versa. D'après ce que je peux dire, le code devrait fonctionner. Mais ce n'est pas le cas. Je lis sur un autre forum que prendre la source et faire le innerText votre message d'erreur devrait faire l'affaire. Mais je dois faire quelque chose de mal quelque part. Lorsque je passe en revue ma fonction javascript, elle fonctionne parfaitement. Juste pas de message d'erreur. Voici mon code:

<asp:CustomValidator ID="ValidateFinHeight" runat="server" CssClass="NormLabel" 
Display="Dynamic" 
ControlToValidate="txtFinHeight" 
ClientValidationFunction="validateFinHeight"></asp:CustomValidator> 

<script type="text/javascript" language="javascript" > 
function validateFinHeight(source, arguments) 
{ 
    var ddl = document.getElementById('cboTubeDia'); 
    var ddlSelIndex = ddl.selectedIndex 

    switch(ddlSelIndex) 
    { 
    case 0: 
     arguments.isValid = true; 
     return;  
    case 1: 
     if(arguments.value%1.25 != 0) 
     { 
      source.innerText = "Height must be divisibly by 1.25"; 
      arguments.isValid = false; 
      return; 
     } 
     else 
     { 
      arguments.isValid = true; 
      return; 
     } 
    case 2: 
     if(arguments.value%1.5 != 0) 
     { 
      source.innerText = "Height must be divisibly by 1.5"; 
      arguments.isValid = false; 
      return; 
     } 
     else 
     { 
      arguments.isValid = true; 
      return; 
     } 
    } 
} 
</script> 
+0

Vous indiquez que le nombre est de 1,25 lorsque l'index selected est de 2 et 1,5 lorsque l'index selected est 1, mais dans votre fonction javascript, vous validez vice versa. Pas important pour la réponse de votre question si. –

Répondre

5

Il y avait plusieurs erreurs mineures dans vos fonctions javascript selon le cas sensibilité (f.e IsValid et Value.). Je l'ai débogué pour voir quelle propriété de l'Erreur-Span je dois placer. C'était l'attribut textContent pour Firefox et innerText pour IE.

La fonction de travail (cross navigateur capable):

function validateFinHeight(source, args) { 
     var ddl = document.getElementById('cboTubeDia'); 
     var ddlSelIndex = ddl.selectedIndex; 
     var errorMsg = ""; 

     switch (ddlSelIndex) { 
      case 0: 
       args.IsValid = true; 
       return; 
      case 1: 
       if (args.Value % 1.25 != 0) { 
        errorMsg = "Height must be divisibly by 1.25"; 
        if (source.innerText) { 
         source.innerText = errorMsg; 
        } else { 
         source.textContent = errorMsg; 
        } 
        args.IsValid = false; 
        return; 
       } 
       else { 
        args.IsValid = true; 
        return; 
       } 
      case 2: 
       if (args.Value % 1.5 != 0) { 
        errorMsg = "Height must be divisibly by 1.5"; 
        if (source.innerText) { 
         source.innerText = errorMsg; 
        } else { 
         source.textContent = errorMsg; 
        } 
        args.IsValid = false; 
        return; 
       } 
       else { 
        args.IsValid = true; 
        return; 
       } 
     } 
    } 
+3

Merci beaucoup très beaucoup! – Johnrad

+0

Pourquoi ne pas laisser de tels problèmes de navigateur sur jQuery? il suffit d'utiliser $ (src) – KMX

4

Désolé, ne peut pas commenter d'autres réponses en tant qu'invité. Je voudrais signaler un problème avec la question ainsi que la réponse de Tims:

L'utilisation de 'arguments' comme nom de paramètre peut entraîner des problèmes (au moins, je viens de l'expérimenter dans firefox 20) car c'est aussi un auto-variable qui contient tous les arguments passés à la fonction, il y a donc un conflit de noms si un paramètre est nommé de la même manière. Je recommande de changer le nom du paramètre en 'args' ou n'importe quoi d'autre.

+1

+1 J'ai modifié ma réponse en conséquence. Merci. –

Questions connexes