2017-05-16 58 views
8

Próbuję zweryfikować pola numerów telefonu. Warunki to sprawdzanie poprawności pól po wprowadzeniu przez użytkownika nazwy następnego pola nazwy lokalizacji. fiddle Również pola numeru telefonu wymagają automatycznej karty do następnego pola wprowadzania telefonu. [po wprowadzeniu numeru kierunkowego (3 cyfry) fokus powinien przejść do następnego 3-cyfrowego pola wprowadzania numeru telefonu). po zakończeniu skup się na 4 ostatnich cyfrach.AngularJS - Sprawdzanie numeru telefonu w trzech polach wejściowych

<form id="aidLocationForm" class="well form-inline"> 
    <div class="control-group phone-group"> 
     <label for="phone1" class="col-xs-12 col-sm-4 col-md-4 col-lg-4 col-xl-4 control-label">Primary contact number</label> 
     <div class="controls"> 
     <input type="text" value="" maxlength="3" ng-minlength="3" ng-maxlength="3" class="area-code input-mini aid-primary-phone1-lbl" aria-label="Primary contact number" pattern="/^[0-9]{3}$"> 
     <input type="text" value="" maxlength="3" ng-minlength="3" ng-maxlength="3" class="area-code input-mini aid-primary-phone2-lbl" aria-label="Primary contact number" pattern="/^[0-9]{3}$"> 
     <input type="text" value="" maxlength="4" ng-minlength="4" ng-maxlength="4" class="area-code input-mini aid-primary-phone3-lbl" aria-label="Primary contact number" pattern="/^[0-9]{4}$"> 
     </div> 
    </div> 
    <div class="control-group"> 
     <label for="primaryLocationName" class="col-xs-12 col-sm-4 col-md-4 col-lg-4 col-xl-4 control-label aid-primary-location-location-lbl">Primary Location Name</label> 
     <!-- end of label --> 
     <div class="controls"> 
     <input type="text" name="primaryLocationName" id="primaryLocationName" class="col-xs-12 col-sm-9 col-md-6 col-lg-6 col-xl-6 aid-primary-location-name-input" ng-model="" required placeholder="Enter the city followed by location" size="50" maxlength="50" 
     aria-disabled="true" aria-label="Primary Location Name"> 
     </div> 
    </div> 
    <button type="submit" class="btn">Sign in</button> 
    </form> 
+0

Twój skrzypce nie jest funkcjonalny. Opublikuj działającą wersję. – Phix

+0

Czy sprawdziłeś konsolę przed opublikowaniem? To nie działa! – Phix

+0

@Phix - Mój zły .. dodałem podstawowe sprawdzania poprawności dla sprawdzania długości i dodałem jquery.jsfiddle.net/priyaa2002/mvsyde1o/ – dragonfly

Odpowiedz

6

W tym celu można użyć dyrektywy z obsługą zdarzeń.

Updated Fiddle

Najważniejsze zmiany obejmują:

1) jQuery obciążenia w skrzypcach przed kątowej więc uzyskać dostęp do selektorów jQuery wewnątrz funkcji kątowych.

2) owinąć wejść w pojemniku z właściwą dyrektywą (uwaga: może to być również wykonane z jednego elementu z restrict: "E" zamiast restrict: "A" i korzystania z nieruchomości template zdefiniować dziecko HTML)

3) Obsługuj zdarzenie input na wejściach, a jeśli długość przekracza wartość we właściwości maxlength, ustaw następne wejście. Jest to bardzo proste w przypadku jQuery, ale można to zrobić bez tego, jeśli naprawdę chcesz.

4) Istnieje milion sposobów sprawdzania poprawności danych wejściowych, ale dodałem prostą metodę.

HTML

<div phone-input> 
    <input type="text" value="" maxlength="3" class="area-code input-mini aid-primary-phone1-lbl" 
     aria-label="Primary contact number" pattern="^[0-9]{3}$"> 
    <input type="text" value="" maxlength="3" class="area-code input-mini aid-primary-phone2-lbl" 
     aria-label="Primary contact number" pattern="^[0-9]{3}$"> 
    <input type="text" value="" maxlength="4" class="area-code input-mini aid-primary-phone3-lbl" 
     aria-label="Primary contact number" pattern="^[0-9]{4}$"> 
</div> 

kątowa dyrektywa

.directive("phoneInput", function() { 
    return { 
    restrict: "A", 
    link: function (scope, element, attrs) { 
     function checkForErrors(input) { 
     var errors = ""; 
     if (!new RegExp(input.attr("pattern")).test(input.val())) { 
      errors += `Field must contain ${input.attr("maxlength")} numbers!\n`; 
     } 
     return errors; 
     } 
     element.on("input", "input", function() { 
     var trigger = $(this); 
     if (trigger.val().length >= trigger.attr("maxlength")) { 
      trigger.blur().next().focus(); 
     } 
     }); 

     element.on("blur", "input", function() { 
     var trigger = $(this); 
     var errors = checkForErrors(trigger); 
     trigger.attr("title", errors); 
     if (trigger.val().trim() === "") { 
      trigger.addClass("invalid-field"); 
      trigger.attr("title", "Field cannot be empty!"); 
     } 
     else if (errors === "") { 
      trigger.removeClass("invalid-field"); 
     } 
     else { 
      trigger.addClass("invalid-field"); 
      trigger.focus(); 
     } 
     }); 
    } 
    } 
}) 
+0

pole telefonu może akceptować tylko numer, a gdy jest nieprawidłowe, powinien wyświetlać komunikat o błędzie. Ale skrzypce nie wyświetlają żadnego komunikatu o błędzie – dragonfly

+0

@dragonfly Prawdopodobnie dobre informacje, aby zaktualizować swoje pytanie. Odpowiednio zaktualizuję moją odpowiedź – mhodges

+0

@dragonfly Edytowane z walidacją. – mhodges

Powiązane problemy