2016-04-27 13 views
0

Eingabefeld erfordert folgende Validierungen:auf keyup Validierung arbeitet aber auf keypress Arbeits seine nicht

1) Längeneingabefeld bis zu 3 ganzzahliger Länge Werte annehmen sollte (die Anzahl der Dezimalstellen Feld nicht erlaubt)

2) Height Eingangs soll bis zu 2 Plätzen Seine adaequat zum ersten Mal 3 integer-Zahl und Dezimalzahlen nehmen, aber + Taste nach dem klicken auf (in der Nähe von Open New Row 1) gleichen Eingabefeldern öffnen, aber jetzt: In den neuen Validierungen Boxen noch nicht arbeiten, wenn ich Verwenden Sie die gleichen Klassen für Eingabefelder, dh neu hinzugefügte Eingabefelder nehmen eine beliebige Anzahl von Ziffern und Zeichen an.

In keyup Funktion es funktioniert, aber wenn der Benutzer eine Taste drückt, ist es nicht für neu eröffnete Reihe arbeiten, so wie seine Arbeit an keypress machen auch in beiden Fällen; auf keyup Validierung funktioniert, aber auf Tastendruck arbeiten seine nicht

var app = angular.module('Calc', []); 
 
var inputQuantity = []; 
 
    $(function() { 
 
     $(".form-control").each(function(i) { 
 
     inputQuantity[i]=this.defaultValue; 
 
     $(this).data("idx",i); // save this field's index to access later 
 
     }); 
 
     $(".form-control").on("keyup", function (e) { 
 
     var $field = $(this), 
 
      val=this.value, 
 
      $thisIndex=parseInt($field.data("idx"),10); // retrieve the index 
 
//  window.console && console.log($field.is(":invalid")); 
 
      // $field.is(":invalid") is for Safari, it must be the last to not error in IE8 
 
     if (this.validity && this.validity.badInput || isNaN(val) || $field.is(":invalid")) { 
 
      this.value = inputQuantity[$thisIndex]; 
 
      return; 
 
     } 
 
     if (val.length > Number($field.attr("maxlength"))) { 
 
      val=val.slice(0, 5); 
 
      $field.val(val); 
 
     } 
 
     inputQuantity[$thisIndex]=val; 
 
     });  
 
    }); 
 
app.controller('Calc_Ctrl', function ($scope, $http) { 
 
    $scope.choices = [{id : 'choice1', l2 : 0, b2 : 0}]; 
 
    $scope.areas = [{id : 'choice2', total : 0}]; 
 

 
    $scope.addNewChoice = function() { 
 
      var newItemNo = $scope.choices.length + 1; 
 
      $scope.choices.push({ 
 
       'id' : 'choice' + newItemNo, l2 : 0, b2 : 0 
 
      }); 
 
    }; 
 
    $scope.removeChoice = function() { 
 
      var lastItem = $scope.choices.length - 1; 
 
      if (lastItem !== 0) { 
 
       $scope.choices.splice(lastItem); 
 
      } 
 
    }; 
 
});
<!DOCTYPE html> 
 
<html> 
 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
 
<script src="newscript.js"></script> 
 

 
<body> 
 
    <div ng-app="Calc" ng-controller="Calc_Ctrl"> 
 
       <div data-ng-repeat="choice in choices" class="col-md-12 col-sm-12 col-xs-12 bottom-line no-gap"> 
 
           <h6>Open New Row {{$index + 1}} 
 
            <button type="button" class="btn btn-default pull-right btn-right-gap btn-red" aria-label="Left Align" ng-click="addNewChoice()" style="margin-top: -5px;" id="plus_icon"> 
 
             <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> 
 
            </button> 
 

 
           </h6> 
 
           <div class="row walls top-gap"> 
 

 
            <div class="form-group col-md-3 col-sm-3 col-xs-12"> 
 
             <label for="length">Length :</label> 
 
             <input type="number" class="form-control text-red bold" id="length" ng-model="choice.l2" min="0" max="999" maxlength="6" step="0.00"> 
 
            </div> 
 
            <div class="form-group col-md-3 col-sm-3 col-xs-12"> 
 
             <label for="height">Height :</label> 
 
             <input type="number" class="form-control text-red bold" id="height" ng-model="choice.b2" min="0" max="999" maxlength="6" step="0.01"> 
 
            </div> 
 
            
 
            <button type="button" class="btn btn-default pull-right btn-red" aria-label="Left Align" ng-click="removeChoice()" id="minus_icon"> 
 
            </button> 
 
           </div> 
 

 
         </div> 
 
    </div> 
 
</body> 
 

 
</html>

Antwort

0

Um keyup Ereignis für alle Felder, die wir der Definition der Zuhörer etwas ändern müssen feuern, der Wähler .form-control sollten innerhalb der festgelegt werden on() als Kind Selektor & document als Hauptwähler:

$(document).on("keyup",".form-control", function (e) { 
// listener code 
}); 

keypress Ereignis verhält sich anders als keyup Ereignis. Tastendruck wird für jede Taste gedrückt & kurz bevor der Wert in das Feld gesetzt ist. Wo keyup Ereignis für jeden Schlüssel ausgelöst & ausgelöst wird, nur nachdem der Wert im Feld festgelegt ist. So wird der Ansatz für nicht funktionieren Tastendruck.

var app = angular.module('Calc', []); 
 
var inputQuantity = []; 
 
    $(function() { 
 
     $(".form-control").each(function (i) { 
 
      inputQuantity[i] = this.defaultValue; 
 
      $(this).data("idx", i); // save this field's index to access later 
 
     }); 
 
     $(document).on("keypress", ".form-control", function (e) { 
 
      if (e.charCode!=0){ 
 
      var $field = $(this), 
 
      val = this.value + '' + String.fromCharCode(e.charCode), pattern; 
 
      if (this.step == 0.00) 
 
       pattern = /[^0-9]/ 
 
      else 
 
       pattern = /[^0-9.]/ 
 
      if (val > parseInt(this.max, 10) || pattern.test(val) || (val.match(/\./) && (val.match(/\./g).length > 1 || val.replace(/\d+\./, '').length > 2))) { 
 
       e.preventDefault(); 
 
      } 
 
      } 
 
     }); 
 
     $(document).on("keyup",".form-control", function (e) { 
 
      var $field = $(this), 
 
       val=this.value, 
 
       $thisIndex=parseInt($field.data("idx"),10); 
 
      if (parseInt(val,10) > parseInt(this.max, 10)) { 
 
       this.value = inputQuantity[$thisIndex]; 
 
       return; 
 
      } 
 
      if (val.length > Number($field.attr("maxlength"))) { 
 
       val=val.slice(0, 5); 
 
       $field.val(val); 
 
      } 
 
      inputQuantity[$thisIndex]=val; 
 
     });  
 
    }); 
 
app.controller('Calc_Ctrl', function ($scope, $http) { 
 
    $scope.choices = [{id : 'choice1', l2 : 0, b2 : 0}]; 
 
    $scope.areas = [{id : 'choice2', total : 0}]; 
 

 
    $scope.addNewChoice = function() { 
 
      var newItemNo = $scope.choices.length + 1; 
 
      $scope.choices.push({ 
 
       'id' : 'choice' + newItemNo, l2 : 0, b2 : 0 
 
      }); 
 
    }; 
 
    $scope.removeChoice = function() { 
 
      var lastItem = $scope.choices.length - 1; 
 
      if (lastItem !== 0) { 
 
       $scope.choices.splice(lastItem); 
 
      } 
 
    }; 
 
});
<!DOCTYPE html> 
 
<html> 
 
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
 
<script src="newscript.js"></script> 
 

 
<body> 
 
    <div ng-app="Calc" ng-controller="Calc_Ctrl"> 
 
       <div data-ng-repeat="choice in choices" class="col-md-12 col-sm-12 col-xs-12 bottom-line no-gap"> 
 
           <h6>Open New Row {{$index + 1}} 
 
            <button type="button" class="btn btn-default pull-right btn-right-gap btn-red" aria-label="Left Align" ng-click="addNewChoice()" style="margin-top: -5px;" id="plus_icon"> 
 
             <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> 
 
            </button> 
 

 
           </h6> 
 
           <div class="row walls top-gap"> 
 

 
            <div class="form-group col-md-3 col-sm-3 col-xs-12"> 
 
             <label for="length">Length :</label> 
 
             <input type="text" class="form-control text-red bold" id="length" ng-model="choice.l2" min="0" max="999" maxlength="6" step="0.00"> 
 
            </div> 
 
            <div class="form-group col-md-3 col-sm-3 col-xs-12"> 
 
             <label for="height">Height :</label> 
 
             <input type="text" class="form-control text-red bold" id="height" ng-model="choice.b2" min="0" max="999" maxlength="6" step="0.01"> 
 
            </div> 
 
            
 
            <button type="button" class="btn btn-default pull-right btn-red" aria-label="Left Align" ng-click="removeChoice()" id="minus_icon"> 
 
            </button> 
 
           </div> 
 

 
         </div> 
 
    </div> 
 
</body> 
 

 
</html>

+0

seine feine, ist eine Möglichkeit, das gleiche mit auf Tastendruck zu tun, wenn wir das auf keyup auch seine Ordnung entfernt, aber für während der Benutzer den Wert eingeben es nehmen muss. – bhatt

+0

, Ja, weil dann nur Benutzer den richtigen Wert – bhatt

+0

Wie pro Ihre Code eingeben werde ich ersetzen die keyup mit keypress, aber bestimmte Szenario seine nicht funktioniert, bitte, wenn möglich, etwas Lösung geben? – bhatt

Verwandte Themen