2011-01-04 7 views
3

Ich versuche derzeit sicherzustellen, dass eine in ein Textfeld eingegebene Nummer um 1,25 oder 1,5 geteilt ist. Die Art, wie ich mich entscheide, ob die Nummer um 1,25 oder 1,5 geändert werden soll, hängt davon ab, was in einer anderen Dropdown-Liste steht. Zum Beispiel: Wenn der ausgewählte Index einer DDL 1 ist, mod ich um 1,5, wenn es 2 ist, mod um 1,25.ASP.NET - Benutzerdefinierter Validator mit dynamischer ErrorMessage

Allerdings muss ich dem Benutzer anzeigen, warum der Fehler ausgelöst wurde. Die Fehlermeldung des benutzerdefinierten Prüfers muss etwas wie "Nummer muss um 1,25 sichtbar sein" oder umgekehrt sein.

Von dem was ich sagen kann Code sollte funktionieren. Aber das tut es nicht. Ich habe in einem anderen Forum gelesen, dass das Annehmen der Quelle und das Ausführen des inneren Textes Ihre Fehlermeldung tun sollte. Aber ich muss irgendwo etwas falsch machen. Wenn ich durch meine JavaScript-Funktion gehe, geht es perfekt durch. Nur keine Fehlermeldung. Hier ist mein 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

Sie erwähnen, dass die Zahl 1,25 ist, wenn selectedindex 2 und 1,5 ist, wenn selectedindex 1 ist, aber in Ihrer Javascript-Funktion validieren Sie umgekehrt. Nicht wichtig für die Antwort auf Ihre Frage. –

Antwort

5

Es gab mehrere kleine Fehler in Ihrem JavaScript-Funktionen nach Groß- und Kleinschreibung (f.e IsValid und Value.). Ich habe es überprüft, um zu sehen, welche Eigenschaft der Error-Span ich einstellen muss. Es war das textContent Attribut für Firefox und innerText für IE.

Die Arbeitsfunktion (Cross-Browser-fähig):

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

Vielen, vielen Dank! – Johnrad

+0

Warum lassen wir solche Crossbrowser-Probleme nicht bei jQuery? benutze einfach $ (src) – KMX

4

Sorry, kommentieren können keine anderen Antworten als Gast. Ich möchte darauf hinweisen, ein Problem mit der Frage sowie Tims Antwort:

Verwenden von 'Argumenten' als Parametername kann zu Schwierigkeiten führen (zumindest habe ich gerade in Firefox 20 erlebt), weil es auch ein ist Auto-Variable, die alle Argumente enthält, die an die Funktion übergeben werden, so gibt es einen Namenskonflikt, wenn ein Parameter auf die gleiche Weise benannt wird. Ich empfehle, den Parameternamen auf 'args' oder irgendetwas anderes zu ändern.

+1

+1 Ich habe meine Antwort entsprechend bearbeitet. Vielen Dank. –

Verwandte Themen