【问题标题】:An AngularJS directive to validate a field when a non-zero sum has been entered into another一个 AngularJS 指令,用于在将非零和输入另一个字段时验证一个字段
【发布时间】:2014-07-08 16:39:22
【问题描述】:

我有两个表单域 - 员工人数和工资总额。

<div ng-repeat="payroll in report.payrolls">
    <input type="number" min="0" class="input-mini" sister-value="{{payroll.grossPayrollAmount}}" ng-model="payroll.employeeCount" type="text">&nbsp;&nbsp;&nbsp;&nbsp;

    <input ng-blur="payroll.grossPayrollAmount = Math.round(payroll.grossPayrollAmount)" type="number" min="0" class="input-small"  ng-model="payroll.grossPayrollAmount" type="text">
</div>

用户不必输入非零值。但是,如果他们为一个输入一个非零值,那么他们必须为另一个输入一个非零值,这就是我想要验证的内容。

这些字段成组重复 - 因此每个工资单都有一对,所以我不确定通过 ID 或班级获取它们是否有效。

我之前写过一些自定义验证指令,但从来没有在另一个相关字段中检查值。

【问题讨论】:

  • 如果我的回答对你有用,如果你用绿色勾号接受它会很棒,所以其他人可以看到它是有效的;)

标签: javascript angularjs validation angular-directive


【解决方案1】:

您可以尝试围绕两个输入创建一个指令:

<directive>
    <input type="number" min="0" ng-model="payroll.employeeCount" type="text">

    <input ng-blur="payroll.grossPayrollAmount = Math.round(payroll.grossPayrollAmount)" type="number" min="0" class="input-small"  ng-model="payroll.grossPayrollAmount" type="text">
</directive>

所以这两个值都可以从中获得,您可以使用 element.find() 访问它们。

您可以像使用 jQuery 一样使用 element.find()。比如给第一个输入设置一个id="employeeCount",可以通过element.find('#employeeCount')访问,这样就得到第一个输入element,最后访问到它element.find('#employeeCount').val() 的值。

注意:如果您不习惯 jQuery,请记住在类名前添加点 (.),在 id 名前添加井号 (#)。

在这里,您有一个可用于任何元素的方法列表,包括“find()”:https://docs.angularjs.org/api/ng/function/angular.element


更新: 这也适用于多对输入,您只需重复指令标记,例如:

<directive>
    <input [...] >

    <input [...] >
</directive>
<directive>
    <input [...] >

    <input [...] >
</directive>

该指令将为您创建的每个实例独立工作。

【讨论】:

  • 哇,我什至没有想到这一点。您能说明如何在这种情况下使用 element.find() 吗?我对指令还不是很熟悉,也没有使用过 element.find() 。另外,感谢您的快速回答!
  • 对不起,我在 element.find() 内容上犯了一个错误,如果你设置了一个 id,你就用“#”访问元素,如果你设置了一个类,你就用一个“。 "
  • 因此,对于每个工资单,每对字段都会重复 - 即工资单 1 和工资单 2 的总工资单和员工人数,等等。你知道在那种情况下通过 ID 获取它们是否仍然有效?我是否必须像在 jQuery 中那样做一些事情,比如获取父对象,然后从那里获取兄弟值?
  • 我不确定我是否理解您的问题(英语不是我的第一语言)。如果你正确地编写你的指令,你可以多次重复使用它,你在指令中执行的 find() 将在标签内搜索,因此它之外是否有更多带有此标签的字段无关紧要。无论如何,如果您要重复此代码,使用类而不是 id 可能是一个更好的主意。
  • 抱歉,我更新了我原来的问题。基本上这两个字段被组合在一起并且组重复。我只是好奇您的解决方案在这种情况下是否仍然有效。我错误地把这个细节从我原来的问题中遗漏了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多