AngularJS Direktiven: ng-click wird nicht ausgelöst, nachdem blur

DEMO

Betrachten Sie das folgende Beispiel:

<input type="text" ng-model="client.phoneNumber" phone-number>
<button ng-click="doSomething()">Do Something</button>
.directive("phoneNumber", function($compile) {
  return {
    restrict: 'A',
    scope: true,
    link: function(scope, element, attrs) { 
      scope.mobileNumberIsValid = true;

      var errorTemplate = "<span ng-show='!mobileNumberIsValid'>Error</span>";

      element.after($compile(errorTemplate)(scope)).on('blur', function() {
        scope.$apply(function() { 
          scope.mobileNumberIsValid = /^\d*$/.test(element.val());
        });
      });
    }  
  };
});

Blick auf die demo, wenn Sie sagen, 'a' am Ende der Telefonnummer ein, und klicken Sie auf die Schaltfläche doSomething() ist nicht genannt. Wenn Sie die Schaltfläche erneut klicken, dann doSomething() genannt wird.

Warum doSomething() ist nicht das erste mal aufgerufen? Irgendwelche Ideen, wie man dieses Problem beheben?

Hinweis: Es ist wichtig, dass die Validierung auf blur.

  • Wie wäre es damit? #wrapper {width: 220px;}. Ich denke, es ist besser, wenn Sie Ihr design bleiben, wie es ist, obwohl dynamischen Faktoren, d.h., Fehlermeldungen, Hinzugefügt und entfernt werden. Aber es ist ur nennen.
  • Bewegliche Knöpfe, um auf der gleichen Zeit, die Sie verwendet werden, ist sehr schlechtes UI-design. Ich würde einfach nur die Spanne es und ändern Sie die leere (&nbsp;) text um zu sagen 'Fehler', wenn ein Fehler vorliegt.
Schreibe einen Kommentar