Я сравниваю переменную с массивом: $scope.object.id
и $scope.groepen.id
с оператором if после использования цикла for. Если $scope.object.id
точно такой же, как один из идентификаторов $scope.groepen.id
, тогда этот индекс $scope.overlap
должен быть истинным.
Я использую другой if, чтобы проверить, правда ли что-либо из $scope.overlap
. Если один из элементов $scope.overlap
имеет значение true, это сделает $scope.bestaand
истинным. Иначе это должно сделать это ложным.
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
else {
$scope.bestaand = false;
}
}
else {
$scope.overlap[i] = false;
}
}
Мой консольный журнал показывает, что $scope.overlap
действительно показывает правильные значения (поэтому, если ничего не совпадает, все индексы являются ложными). $scope.bestaand
превращается в истину, если что-то такое же, но не возвращается обратно в ложь.
Я использую проверку формы Angular, чтобы показать, работает ли проверка здесь:
<div class="col-md-3" ng-class="{ 'has-error' : bestaand }">
<label class="control-label" for="textinput">Groepsnaam</label>
<input id="groepen" name="groepen" type="text" class="form-control input-md" ng-model="object.id" ng-minlength="4" ng-maxlength="16" ng-change="checkOverlap()" required>
<p ng-show="bestaand" class="help-block">Deze groepsnaam bestaat al!</p>
</div>
Что я здесь делаю не так?
Редактировать:
Я изменил место своих утверждений if. Обновленный код показан здесь:
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
}
else {
$scope.overlap[i] = false;
}
if ($scope.overlap[i]) {
$scope.bestaand = true;
console.log("works")
}
else {
$scope.bestaand = false;
console.log("doesnt work")
}
}
Журнал консоли показывает мне это:
Кажется, что это становится правдой, но это перезаписывается (я ввел значение, которое совпадает со вторым значением массива). Если я введу значение, которое совпадает с последним значением массива, оно работает.
3 ответа
Ваша проблема в том, что вы вложили if ($scope.overlap[i]) {
внутрь if ($scope.object.id === $scope.groepen[i].id) {
, поэтому $scope.overlap
всегда будет верным. Это означает, что $scope.bestaand
будет всегда установлен на true
или оставлен как undefined
. Что вы на самом деле хотите -
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
}
else {
$scope.overlap[i] = false;
}
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
else {
$scope.bestaand = false;
}
}
< Сильный > Edit Если вы хотите установить для $scope.bestaand
значение true, если любой из ваших $scope.overlap
элементов имеет значение true, то вам нужно что-то немного другое -
$scope.bestaand = false;
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
}
else {
$scope.overlap[i] = false;
}
if(!$scope.bestaand) {
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
}
}
Это потому, что оператор else недоступен:
$scope.overlap[i] = true;
if ($scope.overlap[i]) {
$scope.bestaand = true;
}
else {
console.log('UNREACHABLE');
$scope.bestaand = false;
}
Что касается вашего отредактированного вопроса:
Ваш $scope.bestaand
указывает на ошибку, поэтому я предполагаю, что если она ложна, она никогда не должна быть истинной.
Поэтому вам нужно переписать ваш цикл следующим образом:
$scope.bestaand = false;
for (var i = 0; i < $scope.groepen.length; i++) {
if ($scope.object.id === $scope.groepen[i].id) {
$scope.overlap[i] = true;
} else {
$scope.overlap[i] = false;
}
if ($scope.overlap[i] && !$scope.bestaand) {
$scope.bestaand = true;
}
}
Потому что нет случая, чтобы вы установили его в ложь. if ($scope.object.id === $scope.groepen[i].id)
имеет значение true, тогда вы уже установили его overlap = true
, если перекрытие равно false, вы не установите bastaan = false
в любом случае
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.