Maison interface Web js tutoriel Modèle de conception JavaScript--Compétences de validation d'entrée de modèle de stratégie_javascript

Modèle de conception JavaScript--Compétences de validation d'entrée de modèle de stratégie_javascript

May 16, 2016 pm 03:29 PM

Le modèle de stratégie définit une famille d'algorithmes et les encapsule séparément afin qu'ils puissent être remplacés les uns par les autres. Ce modèle rend les changements d'algorithme indépendants des clients qui utilisent le calcul.

Définissez d'abord un formulaire de saisie simple :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-">
    <style>
      .form{
        width: px;
        height: px;
        #margin: px auto;
      }
      .form-item-label{
        width:px;
        text-align: right;
        float: left;
      }
      .form-item-input{
        float: left;
      }
      .form-item{
        width: % ;
        height: px;
        line-height: px;
      }
    </style>
  </head>
  <body>
    <div class='form'>
      <div class="form-item">
        <div class='form-item-label'><span>用户名:</span></div>
        <div class='form-item-input'><input id='userName' name='用户名' type="text"></div>
      </div>
      <div class="form-item" >
        <div class='form-item-label'><span>密码:</span></div>
        <div class='form-item-input'><input id='password' name='密码' type="text"></div>
      </div>
      <div class="form-item" >
        <div class='form-item-label'><span>确认密码:</span></div>
        <div class='form-item-input'><input id='repassword' name='密码确认' type="text"></div>
      </div>
      <div class="form-item" >
        <div class='form-item-label'><span>邮箱:</span></div>
        <div class='form-item-input'><input id='mail' name='邮箱' type="text" ></div>
      </div>
    </div>
    <br>
    <button id='submit' >提交</button>
    <script type='text/javascript' src="../reference/jquery-...min.js"></script>
  </body>
</html>
Copier après la connexion

Généralement, dans l'action de soumission après avoir modifié les informations sur la page, les informations saisies doivent être vérifiées. Vous verrez qu'une grande partie du code responsable de la vérification est écrite dans la fonction de soumission ou dans une fonction de vérification indépendante.

Par exemple, comme ci-dessous.         

 $(document).ready(function(){
        $('#submit').bind('click', doSubmit);
      });
      function doSubmit(){
        var eleUserName = document.getElementById('userName');
        if(eleUserName.value === '') {
          alert('用户名不能为空');
          return;
        }
        if(eleUserName.length < 6) {
          alert('用户名长度不能少于6个字符');
          return;
        }
        if(eleUserName.length > 6) {
          alert('用户名长度不能多于20个字符');
          return;
        }
      }
Copier après la connexion

Cette méthode d'écriture peut certainement répondre aux exigences fonctionnelles, mais il y aura plusieurs problèmes :

1. Si je veux l'utiliser sur d'autres pages, je dois copier le code. La soi-disant réutilisation devient une copie, et il y aura beaucoup de duplication du code. Les meilleurs classeront et conditionneront le code de contrôle, mais il y aura davantage de duplications.

2. Si je souhaite ajouter une vérification d'entrée, alors je dois modifier directement la fonction de soumission. Cette fonction sera gonflée et détruira le principe "d'ouverture et de fermeture".

3. Si vous modifiez la fonction de soumission, vous devez couvrir tous les tests de conception de la fonction, car vous ne savez pas quand des changements erronés ou des situations inconnues se produiront.

Étapes de transformation :

1. Traitez chaque logique de vérification comme une stratégie de vérification et encapsulez chaque fonction de stratégie de vérification. Les paramètres de la fonction doivent être cohérents et peuvent accepter des éléments DOM, des valeurs vérifiées, des messages d'erreur et des paramètres personnalisés.

2. Définissez le validateur, vous pouvez importer la fonction de stratégie de validation ou l'ajouter.

3. Le validateur fournit une méthode de vérification pour appeler pendant la vérification et appelle en interne une fonction de stratégie de vérification spécifique.

4. Vérifiez l'appel.

Étape 1.

Considérez chaque if comme une règle métier de vérification, traitez chaque règle métier comme une fonction stratégique distincte et encapsulez toutes les fonctions stratégiques dans un objet stratégique.                           

 var validationStrategies = {
        isNoEmpty: function(element, errMsg, value) {
          if(value === '') {
            return this.buildInvalidObj(element, errMsg, value );
          }
        },
        minLength: function(element, errMsg, value, length) {
          if(value.length < length){
            return this.buildInvalidObj(element, errMsg, value);
          }
        },
        maxLength: function(element, errMsg, value, length) {
          if(value.length > length){
            return this.buildInvalidObj(element, errMsg, value);
          }
        },
        isMail: function(element, errMsg, value, length) {
          var reg = /^(\w-*\.*)+@(\w-&#63;)+(\.\w{2,})+$/;
          if(!reg.test(value)){
            return this.buildInvalidObj(element, errMsg, value);
          }
        }
      };
Copier après la connexion

Les trois premiers paramètres de toutes les fonctions sont cohérents et requis, indiquant l'élément DOM vérifié, le message d'erreur et la valeur vérifiée. Le quatrième commence par les propres règles de vérification de la fonction pour déterminer les paramètres personnalisés.

La méthode "buildInvalidObj" convertit simplement les trois premiers paramètres en un objet d'erreur et le renvoie. Cet objet d'erreur sera renvoyé tant que la vérification échoue.

Selon le principe d'inversion de dépendance, les modules de haut niveau ne doivent pas dépendre des modules de bas niveau, ils ne peuvent donc pas être utilisés directement par l'appelant de vérification.

Encapsulation et abstraction via des validateurs.

Étape 2 :

Définissez le validateur, vous pouvez y importer toutes les stratégies de vérification, ou vous pouvez ajouter les fonctions de stratégie de vérification séparément.                                                          

//输入验证器
      function InputValidators(){
        this.validators = [];
        this.strategies = {};
      }
      //从策略对象导入验证策略函数
      //参数:
      // strategies: 包含各种策略函数的对象
      InputValidators.prototype.importStrategies = function(strategies) {
        for(var strategyName in strategies) {
          this.addValidationStrategy(strategyName, strategies[strategyName]);
        }
      };
      //添加验证策略函数
      //参数:
      // name: 策略名称
      // strategy: 策略函数
      InputValidators.prototype.addValidationStrategy = function(name, strategy){
        this.strategies[name] = strategy;
      };
Copier après la connexion

Étape 3 :

Ajoutez une méthode de vérification pour accepter les appels externes.

La première règle de paramètre est définie sur une règle de vérification, telle que "minLength:6". Le code suivant générera un appel à la fonction de stratégie spécifique. L'appel sera poussé dans le cache et attendra d'être appelé ensemble.

":6" indique les paramètres personnalisés par la fonction stratégie selon ses propres règles.       

  //添加验证方法
      //参数:
      // rule: 验证策略字符串
      // element: 被验证的dom元素
      // errMsg: 验证失败时显示的提示信息
      // value: 被验证的值
      InputValidators.prototype.addValidator = function(rule, element, errMsg, value) {
        var that = this;
        var ruleElements = rule.split(":");
        this.validators.push(function() {
          var strategy = ruleElements.shift();
          var params = ruleElements;
          params.unshift(value);
          params.unshift(errMsg);
          params.unshift(element);
          return that.strategies[strategy].apply(that, params);
        });
      };
Copier après la connexion
Appelez toutes les vérifications via une fonction de contrôle. et renvoie des résultats incorrects.         

   //开始验证
      InputValidators.prototype.check = function() {
        for(var i = 0, validator; validator = this.validators[i++];){
          var result = validator();
          if(result) {
            return result;
          }
        }
      };
Copier après la connexion

Étape 4 :

Lorsque la vérification est requise, créez d'abord un nouvel objet validateur.                                                                      


var validators = new InputValidators();
Copier après la connexion
Importez l'objet contenant la fonction de stratégie de vérification ou ajoutez la fonction de stratégie de vérification séparément.                                                                       

On peut voir que différentes stratégies de vérification peuvent être pré-encapsulées dans l'objet de stratégie, ou peuvent être ajoutées immédiatement en fonction de la situation réelle.
  validators.importStrategies(validationStrategies);
        validators.addValidationStrategy('isEqual', function(element, errMsg, value1, value2) {
          if(value1 !== value2) {
            return this.buildInvalidObj(element, errMsg, value1 );
          }
        });
Copier après la connexion
Ajoutez ensuite la stratégie qui doit être vérifiée, l'élément DOM vérifié, le message d'erreur et la valeur vérifiée dans le validateur en ajoutant une méthode de vérification. Cela évite d'appeler directement l'objet de stratégie et réduit le couplage.

Appelez le chèque du validateur pour effectuer toutes les vérifications.                                                                    
var eleUserName = document.getElementById('userName');
validators.addValidator('isNoEmpty', eleUserName, '用户名不能为空', eleUserName.value);
validators.addValidator('minLength:6', eleUserName, '用户名的字符个数必须是6到20个', eleUserName.value);
validators.addValidator('maxLength:20', eleUserName, '用户名的字符个数必须是6到20个', eleUserName.value);
var elePassword = document.getElementById('password');
validators.addValidator('isNoEmpty', elePassword, '密码不能为空', elePassword.value);
validators.addValidator('minLength:6', elePassword, '密码的字符个数必须是6到20个', elePassword.value);
validators.addValidator('maxLength:20', elePassword, '密码的字符个数必须是6到20个', elePassword.value);
var eleRepassword = document.getElementById('repassword');
validators.addValidator('isNoEmpty', eleRepassword, '确认密码不能为空', eleRepassword.value);
validators.addValidator('minLength:6', eleRepassword, '确认密码的字符个数必须是6到20个', eleRepassword.value);
validators.addValidator('maxLength:20', eleRepassword, '确认密码的字符个数必须是6到20个', eleRepassword.value);
validators.addValidator('isEqual:' + elePassword.value, eleRepassword, '两次密码不一致', eleRepassword.value);
var eleMail = document.getElementById('mail');
validators.addValidator('isNoEmpty', eleMail, '邮箱不能为空', eleMail.value);
validators.addValidator('isMail', eleMail, '邮箱不是一个有效的格式', eleMail.value);
Copier après la connexion

check renvoie un objet d'erreur. Nous pouvons utiliser cet objet pour effectuer uniformément des opérations d'invite sur les éléments DOM après la vérification, telles que définir le focus, sélectionner le contenu ou envelopper une couche de style rouge à l'extérieur de la zone de saisie.
var result = validators.check();
        if(result){
          alert(result.errMsg);
          result.element.focus();
          result.element.select();
          return false;
        }
Copier après la connexion
À ce stade, nous pouvons voir que grâce au changement de mode stratégique, lors de la vérification des entrées, nous n'avons plus qu'à nous soucier de la règle de vérification à utiliser et du type d'informations d'invite à utiliser. Les détails de mise en œuvre ne sont plus exposés. , ce qui est pratique pour l'appel et le suivi ultérieur.

Tous les codes :

Ce qui précède est l'intégralité du contenu du modèle de conception javascript introduit par l'éditeur - vérification de l'entrée du modèle de stratégie. J'espère que vous l'aimerez.
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Que dois-je faire si je rencontre l'impression de code brouillé pour les reçus en papier thermique frontal? Apr 04, 2025 pm 02:42 PM

Des questions et des solutions fréquemment posées pour l'impression de billets thermiques frontaux pour le développement frontal, l'impression de billets est une exigence commune. Cependant, de nombreux développeurs mettent en œuvre ...

Qui est payé plus de python ou de javascript? Qui est payé plus de python ou de javascript? Apr 04, 2025 am 12:09 AM

Il n'y a pas de salaire absolu pour les développeurs Python et JavaScript, selon les compétences et les besoins de l'industrie. 1. Python peut être davantage payé en science des données et en apprentissage automatique. 2. JavaScript a une grande demande dans le développement frontal et complet, et son salaire est également considérable. 3. Les facteurs d'influence comprennent l'expérience, la localisation géographique, la taille de l'entreprise et les compétences spécifiques.

Démystifier javascript: ce qu'il fait et pourquoi c'est important Démystifier javascript: ce qu'il fait et pourquoi c'est important Apr 09, 2025 am 12:07 AM

JavaScript est la pierre angulaire du développement Web moderne, et ses principales fonctions incluent la programmation axée sur les événements, la génération de contenu dynamique et la programmation asynchrone. 1) La programmation axée sur les événements permet aux pages Web de changer dynamiquement en fonction des opérations utilisateur. 2) La génération de contenu dynamique permet d'ajuster le contenu de la page en fonction des conditions. 3) La programmation asynchrone garantit que l'interface utilisateur n'est pas bloquée. JavaScript est largement utilisé dans l'interaction Web, les applications à une page et le développement côté serveur, améliorant considérablement la flexibilité de l'expérience utilisateur et du développement multiplateforme.

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Comment fusionner les éléments du tableau avec le même ID dans un seul objet en utilisant JavaScript? Apr 04, 2025 pm 05:09 PM

Comment fusionner les éléments du tableau avec le même ID dans un seul objet en JavaScript? Lors du traitement des données, nous rencontrons souvent la nécessité d'avoir le même ID ...

Comment réaliser des effets de défilement de parallaxe et d'animation des éléments, comme le site officiel de Shiseido?
ou:
Comment pouvons-nous réaliser l'effet d'animation accompagné d'un défilement de page comme le site officiel de Shiseido? Comment réaliser des effets de défilement de parallaxe et d'animation des éléments, comme le site officiel de Shiseido? ou: Comment pouvons-nous réaliser l'effet d'animation accompagné d'un défilement de page comme le site officiel de Shiseido? Apr 04, 2025 pm 05:36 PM

La discussion sur la réalisation des effets de défilement de parallaxe et d'animation des éléments dans cet article explorera comment réaliser le site officiel de Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ...

La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? La différence dans Console.Log de sortie Résultat: Pourquoi les deux appels sont-ils différents? Apr 04, 2025 pm 05:12 PM

Discussion approfondie des causes profondes de la différence de sortie Console.log. Cet article analysera les différences dans les résultats de sortie de la fonction Console.log dans un morceau de code et expliquera les raisons derrière. � ...

JavaScript est-il difficile à apprendre? JavaScript est-il difficile à apprendre? Apr 03, 2025 am 12:20 AM

Apprendre JavaScript n'est pas difficile, mais c'est difficile. 1) Comprendre les concepts de base tels que les variables, les types de données, les fonctions, etc. 2) Master la programmation asynchrone et les implémenter via des boucles d'événements. 3) Utilisez les opérations DOM et promettez de gérer les demandes asynchrones. 4) Évitez les erreurs courantes et utilisez des techniques de débogage. 5) Optimiser les performances et suivre les meilleures pratiques.

PowerPoint peut-il exécuter JavaScript? PowerPoint peut-il exécuter JavaScript? Apr 01, 2025 pm 05:17 PM

JavaScript peut être exécuté dans PowerPoint et peut être implémenté en appelant des fichiers JavaScript externes ou en intégrant des fichiers HTML via VBA. 1. Pour utiliser VBA pour appeler les fichiers JavaScript, vous devez activer les macros et avoir des connaissances en programmation VBA. 2. ENCHED des fichiers HTML contenant JavaScript, qui sont simples et faciles à utiliser mais sont soumis à des restrictions de sécurité. Les avantages incluent les fonctions étendues et la flexibilité, tandis que les inconvénients impliquent la sécurité, la compatibilité et la complexité. En pratique, l'attention doit être accordée à la sécurité, à la compatibilité, aux performances et à l'expérience utilisateur.

See all articles