2009-11-10 8 views
0

Je ne sais pas comment faire ce qui suit en javascript, ou même si j'y pense correctement. Fondamentalement, je veux joindre une fonction membre javascript pour chaque objet personnalisé rendu, pour que je puisse avoir quelque chose comme cela en C#:javascript OO question - spécifier la fonction de membre privé dans C# objet?

public class NumericTextBox : TextBox 
{ 
    ... 
    string clientScript = "function isValid() { return isNumericValue(this.value); }"; 
    AttachValidationFunction(clientScript); 
} 

public class EmailTextBox : TextBox 
{ 
    ... 
    string clientScript = "function isValid() { return isEmail(this.value); }"; 
    AttachValidationFunction(clientScript); 
} 

puis utilisez ce qui suit la fonction javascript dans la page

function isFormValid() { 
    var controls = getElementsByClass("validatingControl"); 
    ... 
    if (!controls[i].isValid()) return false; 
    ... 
} 

obvisouly en pseudo-code, mais j'espère que cela donne l'idée de ce que je dois réaliser. Aucune suggestion?

Répondre

1

ce que je ferais, est de faire en sorte que AttachValidationFunction reçoit this.ClientID avec la fonction de validation, ajoute à une liste (par exemple, Dictionary<String, String>) et au moment du rendu, les registres d'un bloc javascript avec un tableau de tous les contrôles ajoutés, où le résultat ressemblerait à ceci:

<script type="text/javascript"> 
var controlsToValidate = [ 
    { id: 'ctl00_txtNumeric', validate: function(e) { return isNumeric(e.value); } }, 
    { id: 'ctl00_txtEmail', validate: function(e) { return isEmail(e.value); } } 
]; 
</script> 

Et vous pouvez itérer sur ce tableau comme ceci:

<script type="text/javascript"> 
function isFormValid() { 
    for(var i = 0; i < controlsToValidate.length; i++) { 
     var control = controlsToValidate[i]; 
     var field = document.getElementById(control.id); 

     if(!control.validate(field)) 
     return false; 
    } 

    return true; 
} 
</script> 

J'espère que ce tout à fait clair.

Questions connexes