【问题标题】:Angularjs check and compare two input field valuesAngularjs检查并比较两个输入字段值
【发布时间】:2015-12-30 15:27:45
【问题描述】:

我有 3 个输入字段部分,用 JSON 数组生成的不同标题(Laser Pass、The Giggsy、The setup)分隔。这是它的样子:

我想比较 ScoreAttempts 两个字段,如果 Score 的值大于 Attempts 则显示错误消息。像这样的:

但是像 The Giggsy 这样的部分有不同类型的输入字段,无需比较/检查这些字段。只有当它有 SCORE 和 ATTEMPTS 时才应该比较。

当部分被填满时显示成功消息如下:

我可以做些什么来以有角度的方式制作这些东西。这是我到目前为止所做的:PLUNKER

HTML:

<div class="row" ng-repeat="all in options">

   <h4> {{ all.name}} </h4>
   <div class="col-sm-5ths" ng-repeat="measurement in all.measurements">
      <div class="form-group no-margin form-oneline">
        <label style="width: 100%">{{ measurement.name }}</label>
        <input ng-model="measurement.value" type="{{ measurement.type }}" min="{{ measurement.min }}" max="{{ measurement.max }}"  class="form-control display-inline" required>
        <label style="width: 100%">{{ measurement.scale }}</label>
      </div>
    </div>
    <span style="color:red;" ng-show="testDataFieldWarning(options.measurements)">
      Score can't be larger then Attempts
    </span>
    <span style="color:Green;" >
      Done!!
    </span>
  </div>
  <button type="submit" style="margin-top:50px;" ng-disable="">Submit</button>

JS

$scope.testDataFieldWarning = function (measurements) {
    var score = 0 , attempts = 0;

    angular.forEach(measurements, function(measurement) {
      if((measurement.name) == 'Score'){
        score  = measurement.value;
      }
      if((measurement.name) == 'Attempts'){
        attempts  = measurement.value;
      }
    });
    return attempts < score;
  }

   $scope.testDataFieldValidate = function (measurement) {

      var isInvalid = false;
      angular.forEach(measurement, function(v) {
        if(typeof (v.value) == 'undefined'){
          isInvalid = true;
        }
      });

      return (isInvalid);
    }

抱歉英语和解释不好。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    forked your plunker 并添加了一些额外的验证功能...

      function isScoreField(measurements) {
        if (measurements[1].name === 'Score' && measurements[2].name ==='Attempts') {
          return true;
        } else {
          return false;
        }
      }
    
      $scope.testDataFieldInvalid = function (measurements) {
        if (isScoreField(measurements) && parseInt(measurements[2].value) < parseInt(measurements[1].value)) {
          return true;
        } else {
          return false;
        }
      };
    
      $scope.testDataFieldsEntered = function (measurements) {
        if (measurements[1].value && measurements[2].value) {
          return true;
        } else {
          return false;
        }
      };
    

    ... 这将有条件地显示/隐藏完成/错误消息。

    <span style="color:red;" ng-show="testDataFieldInvalid(all.measurements)">
      Score can't be larger than Attempts
    </span>
    <span style="color:Green;" ng-show="testDataFieldsEntered(all.measurements) && !testDataFieldInvalid(all.measurements)">
      Done!!
    </span>
    

    希望这会有所帮助!

    【讨论】:

    • 感谢您的回答!但有时它会给出错误的警告。即,如果我在分数中添加 12,在尝试中添加 2,它显示我完成了!而不是:分数不能大于尝试次数
    • 是的,它将值作为字符串进行比较,因此您只需将条件更改为parseInt(measurements[2].value) &lt; parseInt(measurements[1].value)。我相应地更新了 plunker。
    • 现在完美了!非常感谢
    • 这里只有一个问题!如何在所有字段完成之前保持提交按钮禁用!
    • 谢谢,我正在尝试您的建议。如果我能解决,我会告诉你的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2022-12-04
    • 2017-09-01
    相关资源
    最近更新 更多