gpt4 book ai didi

angularjs - 如果选中复选框,则需要输入值

转载 作者:行者123 更新时间:2023-12-03 14:44:38 27 4
gpt4 key购买 nike

我有一系列行,每行一个复选框。每行都有几个输入。我已经进行了验证,要求在所有行中至少选中一个复选框。但是,到目前为止,我无法要求输入的值仅用于选中的复选框。

enter image description here

HTML:

<div style="width: 100%;">
<checkboxgroup-Wheelbase min-required="1">
<table style="width: 100%">
<tr>
<td>
<table style="width: 97%;">
<tr>
<th style="width: 220px;" class="wheelbaseHeaderCell">Wheelbase<br /><span style="font-weight: 400;">(choose min of 1)</span></th>
<th class="wheelbaseHeaderCell">Payload<br />[ pounds ]</th>
<th class="wheelbaseHeaderCell">Length<br />[ inches ]</th>
<th class="wheelbaseHeaderCell">Height<br />[ inches ]</th>
<th class="wheelbaseHeaderCell">Weight<br />[ pounds ]</th>
<th class="wheelbaseHeaderCell">Turn Radius<br />[ feet ]</th>
</tr>
</table>
</td>
</tr>
<tr>
<td style="height: 5px;"></td>
</tr>
<tr>
<td>
<div style="height: 170px; overflow: auto;">
<table style="width: 100%;">
<tr class="rowGroup" ng-repeat="wheelbase in wheelbases" data-rowParent="wheelbase[wheelbase.Id]">
<td class="wheelbaseCell" style="padding-left: 10px;" id="{{wheelbase.Id}}">
<!--Wheelbase-->
<label class="checkbox" for="{{wheelbase.Id}}" style="text-align: left; width: 200px;">
{{wheelbase.WheelbaseGrade}} - {{wheelbase.Inches}} inches
<input ng-model="wheelbase.checked" id="wheelbase{{wheelbase.Id}}" type="checkbox" /></label>
</td>
<td >
<!--Payload Capacity-->
<span style="display: inline-block;" ng-controller="PayloadCapacitiesCtrl">
<input ng-model="payloadCapacity.Pounds" data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-class="getClass({{wheelbase.Id}})" ng-disabled="!wheelbase.checked" />
</span>
</td>
<td >
<!--Length-->
<span style="display: inline-block;" ng-controller="VehicleLengthCtrl">
<input data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-class="getClass({{wheelbase.Id}})" ng-disabled="!wheelbase.checked"/>
</span>
</td>
<td >
<!--Height-->
<span style="display: inline-block;" ng-controller="VehicleHeightCtrl">
<input data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-class="getClass({{wheelbase.Id}})" ng-disabled="!wheelbase.checked"/>
</span>
</td>
<td >
<!--Weight-->
<span style="display: inline-block;" ng-controller="VehicleWeightCtrl">
<input data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-class="getClass({{wheelbase.Id}})" ng-disabled="!wheelbase.checked"/>
</span>
</td>
<td >
<!--Turning Radii -->
<span style="display: inline-block;" ng-controller="TurningRadiiCtrl">
<input data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-class="getClass({{wheelbase.Id}})" ng-disabled="!wheelbase.checked"/>
</span>
</td>
</tr>
</table>
</div>
</td>
</tr>
</table>
</checkboxgroup-Wheelbase>
<span class="hint" style="margin: 0 0 0 -35px; text-align: center; width: 100%;">
<button style="padding-top: 5px; ;" class="addNew" ng-click="openDialog()"><i class="icon-plus"></i> [ add new wheelbase ]</button>
</span>

要求至少选中一个复选框的指令:
.directive('checkboxgroupWheelbase', function() {
return {
restrict: 'E',
controller: function($scope, $attrs) {
var self = this;
var ngModels = [];
var minRequired;
self.validate = function() {
var checkedCount = 0;
angular.forEach(ngModels, function(ngModel) {
if (ngModel.$modelValue) {
checkedCount++;
}
});
console.log('minRequired', minRequired);
console.log('checkedCount', checkedCount);
var minRequiredValidity = checkedCount >= minRequired;
angular.forEach(ngModels, function(ngModel) {
ngModel.$setValidity('checkboxgroupWheelbase-minRequired', minRequiredValidity, self);
});
};

self.register = function(ngModel) {
ngModels.push(ngModel);
};

self.deregister = function(ngModel) {
var index = this.ngModels.indexOf(ngModel);
if (index != -1) {
this.ngModels.splice(index, 1);
}
};

$scope.$watch($attrs.minRequired, function(value) {
minRequired = parseInt(value, 10);
self.validate();
});
}
};
})

有没有一种简单、优雅的方法来要求那些选中的复选框的输入字段是必需的?它通过“规则”在 JQuery 中直接出现,但我还没有找到通过 AngularJs 做到这一点的方法。有人建议我使用子表单,但我无法想象它的实现。

如果我不够清楚:

对于选中相应复选框的任何行,该行的所有输入都必须具有值。因此,如果选中第 1,3 和 5 行的复选框,则第 1,3 和 5 行的输入需要值。如果选中一行的复选框,则同一行的输入需要一个值。如果未选中该行的复选框,则不需要这些输入。在澄清这一点时,我认为明智的做法是禁用所有输入,直到选中它们各自的轴距复选框。

更新:

我要感谢 user2104976 让我考虑更好的用户体验,因为在未选中相应的轴距复选框时确保不添加输入值,所以我实现了这个
 **"ng-disabled="!wheelbase.checked"** 

在每个相应的输入中。多谢,伙计!!现在如何解决我原来的问题,大声笑!!

最佳答案

您可以使用 ng-required 来完成此操作:

ng-required="wheelbase.checked"

这是更新后的 HTML 的相关部分:

<table style="width: 100%;">
<tr class="rowGroup" ng-repeat="wheelbase in wheelbases" data-rowParent="wheelbase[wheelbase.Id]" style="padding-top: 10px;">
<td class="wheelbaseCell" style="padding-left: 10px;" id="{{wheelbase.Id}}">
<!--Wheelbase-->
<label class="checkbox" for="{{wheelbase.Id}}" style="text-align: left; width: 200px;">
{{wheelbase.WheelbaseGrade}} - {{wheelbase.Inches}} inches
<input ng-model="wheelbase.checked" id="wheelbase{{wheelbase.Id}}" type="checkbox" /></label>
</td>
<td >
<!--Payload Capacity-->
<span style="display: inline-block;" ng-controller="PayloadCapacitiesCtrl">
<input ng-model="payloadCapacity.Pounds" data-rowChild="{{wheelbase[wheelbase.Id]}}" id="payload{{wheelbase.Id}}" type="number" style="width: 80px;" min="0" ng-disabled="!wheelbase.checked" ng-required="wheelbase.checked" ng-class="{'formRequire' : wheelbase.checked }" />
</span>
</td>
<td >
<!--Length-->
<span style="display: inline-block;" ng-controller="VehicleLengthCtrl">
<input ng-model="vehicleLength.Inches" data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-disabled="!wheelbase.checked" ng-required="wheelbase.checked" ng-class="{'formRequire' : wheelbase.checked }" />
</span>
</td>
<td >
<!--Height-->
<span style="display: inline-block;" ng-controller="VehicleHeightCtrl">
<input ng-model="vehicleHeight.Inches" data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-disabled="!wheelbase.checked" ng-required="wheelbase.checked" ng-class="{'formRequire' : wheelbase.checked }" />
</span>
</td>
<td >
<!--Weight-->
<span style="display: inline-block;" ng-controller="VehicleWeightCtrl">
<input ng-model="vehicleWeight.Pounds" data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-disabled="!wheelbase.checked" ng-required="wheelbase.checked" ng-class="{'formRequire' : wheelbase.checked }" />
</span>
</td>
<td >
<!--Turning Radii -->
<span style="display: inline-block;" ng-controller="TurningRadiiCtrl">
<input ng-model="turningRadius.Feet" data-rowChild="{{wheelbase[wheelbase.Id]}}" type="number" style="width: 80px;" min="0" ng-disabled="!wheelbase.checked" ng-required="wheelbase.checked" ng-class="{'formRequire' : wheelbase.checked }" />
</span>
</td>
</tr>
</table>

随着 ng-disabled="!wheelbase.checked"
enter image description here

使用 ng-required="wheelbase.checked"& ng-class="{'formRequire' : wheelbase.checked }"

enter image description here

如果选中相应的轴距复选框,则这是进入输入的条件类:

.ng 无效 .formRequire {
轮廓:红色实心3px;
}

关于angularjs - 如果选中复选框,则需要输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815463/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com