Question

Comment puis-je forcer le script onchange de l'entrée pour exécuter avant script du RangeValidator?

Je veux éviter un échec de validation lorsque l'utilisateur entre un signe dollar ou une virgule.

function cleanUp(str) {
    re = /^\$|,/g;
    return str.replace(re, ""); // remove "$" and ","
}

<input type="text" id="salary" runat="server"
onchange="this.value=cleanUp(this.value)" />

<asp:RangeValidator ID="salaryValidator" 
    runat="server" ErrorMessage="Invalid Number"
    ControlToValidate="salary" Type="Double" />

Mise à jour: J'ai décidé d'utiliser un CustomValidator qui vérifie la gamme et utilise une expression régulière de devises. Merci Michael Kniskern.

function IsCurrency(sender, args) {
    var input = args.Value;

    // Check for currency formatting.
    // Expression is from http://regexlib.com/REDetails.aspx?regexp_id=70
    re = /^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(.[0-9][0-9])?$/;
    isCurrency = input.match(re);

    if (isCurrency) {
        // Convert the string to a number.
        var number = parseFloat(CleanUp(input));
        if (number != NaN) {
            // Check the range.
            var min = 0;
            var max = 1000000;
            if (min <= number && max >= number) {
                // Input is valid.
                args.IsValid = true;
                return;
            }
        }
    }

    // Input is not valid if we reach this point.
    args.IsValid = false;
    return;
}

function CleanUp(number) {
    re = /^\$|,/g;
    return number.replace(re, ""); // remove "$" and ","
}       

<input type="text" id="salary" runat="server" />

<asp:CustomValidator ID="saleryValidator" ControlToValidate="salary" runat="server" 
ErrorMessage="Invalid Number" ClientValidationFunction="IsCurrency" />
Était-ce utile?

La solution

Avez-vous essayé d'utiliser un contrôle CustomerValidator et combiné la fonctionnalité des méthodes de nettoyage JS et la méthode RangeValidator.

Autres conseils

Je pense que je peux améliorer cela. Cela rend les chiffres des virgules et cents en option:

^\$?([0-9]{1,3},?([0-9]{3},?)*[0-9]{3}|[0-9]+)(\.[0-9]{0,2})?$

Il y a une façon de le faire en vous inscrivant le script; Mais pourquoi ne pas utiliser un validateur Expression régulière pour vous assurer que l'entrée est correcte?

En outre, le validateur Range exécute sur les champs de l'événement onBlur, pas sur le changement.

Il suffit de remarquer que vous avez. " pour la virgule, mais cela signifie que le regex acceptera tout caractère à cet endroit. Vous devez utiliser ce point pour \. décimal.

/^\$?([0-9]{1,3},([0-9]{3},)*[0-9]{3}|[0-9]+)(\.[0-9][0-9])?$/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top