Вам нужно поменять чек. Ваш код только смотрит на последний индекс, и это определяет, что произойдет. И нет смысла делать это по таймеру.
Добавьте прослушиватели событий к элементам, и я использую фильтр, чтобы найти любые непроверенные элементы.
var inputs = $(".info-check")
var check = $("#info-check")
inputs.on("change", function() {
var isValid = inputs.filter(function(input) {
return this.value.trim().length === 0
}).length === 0
check.toggleClass('hide-info-complete', !isValid)
}).change()
.hide-info-complete {
visibility: hidden;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<i class="text-success fa fa-check hide-info-complete" id="info-check"></i>
<input class="info-check" name="school" />
<input class="info-check" name="bus" />
Делать это без jQuery
var inputs = Array.from(document.querySelectorAll(".info-check"))
var check = document.querySelector("#info-check")
var checkValid = function () {
var isValid = inputs.every(function(input) {
return input.value.trim().length > 0
})
check.classList.toggle('hide-info-complete', !isValid)
}
inputs.forEach(function (input) {
input.addEventListener("change", checkValid)
})
.hide-info-complete {
visibility: hidden;
}
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<i class="text-success fa fa-check hide-info-complete" id="info-check"></i>
<input class="info-check" name="school" />
<input class="info-check" name="bus" />
и с HTML5, который вообще не требует JavaScript.
form:invalid #info-check{
visibility: hidden;
}
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" />
<form>
<i class="text-success fa fa-check" id="info-check"></i>
<input class="info-check" name="school" required />
<input class="info-check" name="bus" required />
</form>