Я хочу использовать цикл for-in, чтобы проверить, не определены ли элементы в объекте. Однако цикл будет выполняться только в том случае, если уже есть значения, хранящиеся в объекте.
Вот пример того, как я помещаю значения в объект:
<div>
<input type="radio" name="" id="" ng-model="user.fac_staff" value="">
<input type="radio" name="" id="" ng-model="user.fac_staff" value="">
<input type="radio" name="" id="" ng-model="user.fac_staff" value="">
</div>
<div>
<select class="" id="" name="" ng-options="ng repeat stuff" data-ng-model="user.college">
<option value="">Stuff</option>
</select>
</div>
<div>
<input type="radio" name="" id="" ng-model="user.source" value="">
<input type="radio" name="" id="" ng-model="user.source" value="">
<input type="radio" name="" id="" ng-model="user.source" value="">
</div>
<input type="text" class="" name="" id="" data-ng-model="user.name_awarding_agency">
<button type="submit" ng-click="ajs_function(user)">Click</button>
Вот пример того, что я пытаюсь сделать в контроллере:
$scope.ajs_function = function(userObj) {
for(var key in userObj) {
if(userObj[key] == "undefined")
//do stuff
}
}
Цикл не запускается вообще. Я попытался отобразить значения ключей на консоли, и когда это не сработало, я попытался отобразить значение счетчика для консоли, чтобы убедиться, что он вообще что-то делает. Я должен также упомянуть, что у меня есть аналогичный цикл for-in в функции, проходящей через один и тот же объект, однако этот цикл работает только тогда, когда уже есть данные.
Попробуйте это вместо этого:
for(var key in userObj) {
if(typeof userObj[key] === "undefined")
//do stuff
}
Вы проверяли, было ли значение свойства объекта равным строковому литералу "undefined". Вы должны проверить, не указан ли тип свойства объекта.
typeof
- это то, что нужно, но там могут происходить и другие вещи, вызывающие проблемы.