Javascript 一个AngularJS指令,用于在将非零和输入到另一个字段时验证字段

Javascript 一个AngularJS指令,用于在将非零和输入到另一个字段时验证字段,javascript,angularjs,validation,angular-directive,Javascript,Angularjs,Validation,Angular Directive,我有两个表单字段-员工计数和工资总额 <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;&

我有两个表单字段-员工计数和工资总额

<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或类获取它们是否有效


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

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

<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()访问它们

使用element.find()就像使用jQuery一样。例如,将id=“employeeCount”设置为第一个输入,您可以使用element.find(“#employeeCount”)访问它,因此您可以获得第一个输入元素,最后使用element.find(“#employeeCount”).val()访问它的值

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

这里有一个可以用于任何元素的方法列表,包括“find()”:


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

<directive>
    <input [...] >

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

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


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

哇,我甚至没有想到这一点。您能说明如何在此上下文中使用element.find()吗?我还不太熟悉指令,以前也没有使用过element.find()。另外,谢谢你的快速回答!很抱歉,我在元素.find()内容上犯了一个错误,如果您设置了一个id,您将使用“#”访问该元素,如果您设置了一个类,您将使用“.”因此,每对字段都会对每个工资单重复—即工资单1和工资单2的总工资单和员工计数,依此类推。您知道在这种情况下,通过ID获取它们是否仍然有效吗?我是否需要像在jQuery中那样获取父级,然后从父级获取兄弟级值?我不确定是否理解您的问题(英语不是我的第一语言)。如果您正确地编写了指令,您可以多次重复使用它,您在指令内执行的find()将在标记内搜索,因此,如果有更多字段在标记外使用此标记,则无关紧要。无论如何,如果你要重复这段代码,最好使用类而不是id。对不起,我更新了我原来的问题。基本上,这两个字段分组在一起,分组重复。我只是好奇你的解决方案在那种情况下是否仍然有效。我错误地把这个细节从我的原始问题中漏掉了。如果我的答案对你有用,如果你用绿色的勾号接受它,那就太好了,这样其他人就可以看到它是有效的;)