Heim Web-Frontend js-Tutorial JavaScript-Entwurfsmuster – Strategiemuster-Eingabevalidierung_Javascript-Kenntnisse

JavaScript-Entwurfsmuster – Strategiemuster-Eingabevalidierung_Javascript-Kenntnisse

May 16, 2016 pm 03:29 PM

Das Strategiemuster definiert eine Familie von Algorithmen und kapselt sie separat, sodass sie untereinander ersetzt werden können. Dieses Muster macht die Algorithmusänderungen unabhängig von den Kunden, die die Berechnung verwenden.

Definieren Sie zunächst ein einfaches Eingabeformular:

<!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>
Nach dem Login kopieren

Im Allgemeinen müssen bei der Übermittlungsaktion nach dem Bearbeiten der Informationen auf der Seite die Eingabeinformationen überprüft werden. Sie werden feststellen, dass viel Code, der für die Überprüfung verantwortlich ist, in der Übermittlungsfunktion oder in einer unabhängigen Prüffunktion geschrieben ist.

Zum Beispiel wie unten.         

 $(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;
        }
      }
Nach dem Login kopieren

Diese Schreibmethode kann die funktionalen Anforderungen durchaus erfüllen, es treten jedoch mehrere Probleme auf:

1. Wenn ich es auf anderen Seiten verwenden möchte, muss ich den Code kopieren. Die sogenannte Wiederverwendung wird zum Kopieren, und es wird eine Menge Duplikate des Codes geben. Bessere werden den Prüfcode klassifizieren und verpacken, aber es wird mehr Duplikate geben.

2. Wenn ich eine Eingabeüberprüfung hinzufügen möchte, muss ich die Übermittlungsfunktion direkt ändern. Diese Funktion wird aufgebläht und zerstört das Prinzip „Öffnen und Schließen“.

3. Wenn Sie die Übermittlungsfunktion ändern, müssen Sie alle Tests des Funktionsdesigns abdecken, da Sie nicht wissen, wann fehlerhafte Änderungen oder unbekannte Situationen auftreten.

Transformationsschritte:

1. Behandeln Sie jede Verifizierungslogik als Verifizierungsstrategie und kapseln Sie jede Verifizierungsstrategiefunktion. Die Funktionsparameter sollten konsistent sein und können DOM-Elemente, verifizierte Werte, Fehlermeldungen und benutzerdefinierte Parameter akzeptieren.

2. Definieren Sie den Validator. Sie können die Validierungsstrategiefunktion importieren oder hinzufügen.

3. Der Validator stellt eine Überprüfungsmethode zum Aufrufen während der Überprüfung bereit und ruft intern eine bestimmte Überprüfungsstrategiefunktion auf.

4. Überprüfen Sie den Anruf.

Schritt 1.

Betrachten Sie jedes if als Überprüfungsgeschäftsregel, behandeln Sie jede Geschäftsregel als separate Strategiefunktion und kapseln Sie alle Strategiefunktionen in einem Strategieobjekt.                           

 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);
          }
        }
      };
Nach dem Login kopieren

Die ersten drei Parameter aller Funktionen sind konsistent und erforderlich und geben das überprüfte DOM-Element, die Fehlermeldung und den überprüften Wert an. Der vierte Parameter beginnt mit den eigenen Überprüfungsregeln der Funktion, um die benutzerdefinierten Parameter zu bestimmen.

Die Methode „buildInvalidObj“ wandelt lediglich die ersten drei Parameter in ein Fehlerobjekt um und gibt dieses zurück, solange die Überprüfung fehlschlägt.

Nach dem Prinzip der Abhängigkeitsumkehr sollten High-Level-Module nicht von Low-Level-Modulen abhängen, sodass sie vom Aufrufer der Verifizierung nicht direkt verwendet werden können.

Kapselung und Abstraktion durch Validatoren.

Schritt 2:

Definieren Sie den Validator. Sie können alle Verifizierungsstrategien darin importieren oder die Verifizierungsstrategiefunktionen separat hinzufügen.                                                       

//输入验证器
      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;
      };
Nach dem Login kopieren

Schritt 3:

Verifizierungsmethode hinzufügen, um externe Anrufe anzunehmen.

Die erste Parameterregel ist auf eine Überprüfungsregel festgelegt, z. B. „minLength:6“. Der folgende Code generiert einen Aufruf der spezifischen Strategiefunktion. Der Aufruf wird in den Cache verschoben und wartet darauf, gemeinsam aufgerufen zu werden.

„:6“ gibt die Parameter an, die von der Strategiefunktion gemäß ihren eigenen Regeln angepasst werden.       

  //添加验证方法
      //参数:
      // 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);
        });
      };
Nach dem Login kopieren
Alle Verifizierungen über eine Prüffunktion aufrufen. und falsche Ergebnisse zurückgeben.         

   //开始验证
      InputValidators.prototype.check = function() {
        for(var i = 0, validator; validator = this.validators[i++];){
          var result = validator();
          if(result) {
            return result;
          }
        }
      };
Nach dem Login kopieren

Schritt 4:

Wenn eine Verifizierung erforderlich ist, erstellen Sie zunächst ein neues Validatorobjekt.                                                                   


var validators = new InputValidators();
Nach dem Login kopieren
Importieren Sie das Objekt, das die Verifizierungsstrategiefunktion enthält, oder fügen Sie die Verifizierungsstrategiefunktion separat hinzu.                                                                    

Es ist ersichtlich, dass unterschiedliche Verifizierungsstrategien vorab in das Strategieobjekt eingekapselt oder je nach tatsächlicher Situation sofort hinzugefügt werden können.
  validators.importStrategies(validationStrategies);
        validators.addValidationStrategy('isEqual', function(element, errMsg, value1, value2) {
          if(value1 !== value2) {
            return this.buildInvalidObj(element, errMsg, value1 );
          }
        });
Nach dem Login kopieren
Fügen Sie dann die zu überprüfende Strategie, das überprüfte DOM-Element, die Fehlermeldung und den überprüften Wert in den Validator ein, indem Sie eine Überprüfungsmethode hinzufügen. Dadurch wird der direkte Aufruf des Strategieobjekts vermieden und die Kopplung verringert.

Rufen Sie die Validierungsprüfung an, um alle Überprüfungen durchzuführen.                                                                  
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);
Nach dem Login kopieren

check gibt ein Fehlerobjekt zurück, um nach der Prüfung einheitlich Eingabeaufforderungsvorgänge für DOM-Elemente auszuführen, z. B. das Festlegen des Fokus, das Auswählen von Inhalt oder das Umschließen einer roten Stilebene außerhalb des Eingabefelds.
var result = validators.check();
        if(result){
          alert(result.errMsg);
          result.element.focus();
          result.element.select();
          return false;
        }
Nach dem Login kopieren
An diesem Punkt können wir sehen, dass wir uns durch die Änderung des Strategiemodus bei der Eingabeüberprüfung nur noch darum kümmern müssen, welche Überprüfungsregel verwendet werden soll und welche Art von Eingabeaufforderungsinformationen verwendet werden sollen. Die Implementierungsdetails werden nicht mehr offengelegt , was für den Aufruf und die anschließende Erweiterung und Komponentisierung praktisch ist.

Alle Codes:

Das Obige ist der gesamte Inhalt des vom Herausgeber eingeführten Javascript-Designmusters – Überprüfung der Eingabe von Strategiemustern.
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Apr 04, 2025 pm 02:42 PM

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

Wer bekommt mehr Python oder JavaScript bezahlt? Wer bekommt mehr Python oder JavaScript bezahlt? Apr 04, 2025 am 12:09 AM

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Entmystifizieren JavaScript: Was es tut und warum es wichtig ist Apr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Wie fusioniere ich Arrayelemente mit derselben ID mit JavaScript in ein Objekt? Apr 04, 2025 pm 05:09 PM

Wie fusioniere ich Array -Elemente mit derselben ID in ein Objekt in JavaScript? Bei der Verarbeitung von Daten begegnen wir häufig die Notwendigkeit, dieselbe ID zu haben ...

Der Unterschied in der Konsole.log -Ausgabeergebnis: Warum unterscheiden sich die beiden Anrufe? Der Unterschied in der Konsole.log -Ausgabeergebnis: Warum unterscheiden sich die beiden Anrufe? Apr 04, 2025 pm 05:12 PM

Eingehende Diskussion der Ursachen des Unterschieds in der Konsole.log-Ausgabe. In diesem Artikel wird die Unterschiede in den Ausgabeergebnissen der Konsolenfunktion in einem Code analysiert und die Gründe dafür erläutert. � ...

Wie kann man Parallax -Scrolling- und Element -Animationseffekte wie die offizielle Website von Shiseido erzielen?
oder:
Wie können wir den Animationseffekt erzielen, der von der Seite mit der Seite mit der offiziellen Website von Shiseido begleitet wird? Wie kann man Parallax -Scrolling- und Element -Animationseffekte wie die offizielle Website von Shiseido erzielen? oder: Wie können wir den Animationseffekt erzielen, der von der Seite mit der Seite mit der offiziellen Website von Shiseido begleitet wird? Apr 04, 2025 pm 05:36 PM

Diskussion über die Realisierung von Parallaxe -Scrolling- und Elementanimationseffekten in diesem Artikel wird untersuchen, wie die offizielle Website der Shiseeido -Website (https://www.shiseeido.co.jp/sb/wonderland/) ähnlich ist ...

Ist JavaScript schwer zu lernen? Ist JavaScript schwer zu lernen? Apr 03, 2025 am 12:20 AM

JavaScript zu lernen ist nicht schwierig, aber es ist schwierig. 1) Verstehen Sie grundlegende Konzepte wie Variablen, Datentypen, Funktionen usw. 2) Beherrschen Sie die asynchrone Programmierung und implementieren Sie sie durch Ereignisschleifen. 3) Verwenden Sie DOM -Operationen und versprechen Sie, asynchrone Anfragen zu bearbeiten. 4) Vermeiden Sie häufige Fehler und verwenden Sie Debugging -Techniken. 5) Die Leistung optimieren und Best Practices befolgen.

So implementieren Sie die Funktion des Ziell- und Drop-Einstellungsfunktion, ähnlich wie bei VSCODE in der Front-End-Entwicklung? So implementieren Sie die Funktion des Ziell- und Drop-Einstellungsfunktion, ähnlich wie bei VSCODE in der Front-End-Entwicklung? Apr 04, 2025 pm 02:06 PM

Erforschen Sie die Implementierung der Funktion des Bedien- und Drop-Einstellungsfunktion der Panel ähnlich wie VSCODE im Front-End. In der Front-End-Entwicklung wird VSCODE ähnlich wie VSCODE implementiert ...

See all articles