JavaScript Loop Inside Loop Issue - PullRequest
2 голосов
/ 22 марта 2019

У меня есть цикл внутри цикла:

var len = bolumlerUnique.length;
function bolumleriGonder() {
    for (i = 0; i < bolumlerUnique.length; i++) {
        elementBolumler = $("[bolumid=" + bolumlerUnique[i] + "]:checked");
        console.log(elementBolumler);
        for (j = 0; j < len; j++) {
            console.log(elementBolumler[j])
        }
    }
}

bolumlerUnique - это массив -> ["1", "2", "3", "4"]
У меня есть радиовходы, и я нахожу элементы с этим кодом

$("[bolumid=" + bolumlerUnique[i] + "]:checked");

Но во втором цикле console.log пишет undefined.
Но elementBolumler - это глобальная переменная, определенная в элементе.

Ответы [ 3 ]

1 голос
/ 22 марта 2019

во втором цикле console.log пишет неопределенное.

Чтобы ответить на вопрос в том виде, в каком он (почти) представлен: «почему я не определен с $()[j]

В jquery, если вы попытаетесь получить элемент по индексу, который больше, чем количество элементов в коллекции jquery, вы получите undefined (не массив вне границ, поскольку это не массив), то есть:

var divs = $(".d");
console.log(divs[0])
console.log(divs[1])  // undefined
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="d">d1</div>

Проблема с:

var len = bolumlerUnique.length;
for (j = 0; j < len; j++) {

Когда вы перебираете

$("[bolumid=" + bolumlerUnique[i] + "]:checked")

будет иметь столько проверенных элементов, сколько соответствует id. Так что весьма вероятно, что

elementBolumler.length !== len

Как отмечено в комментариях к вопросу, [bolumid=" + bolumlerUnique[i] + "] - это radio, поэтому он вернет только один элемент.

Ваша логика для индекса внутреннего цикла len неверна, но не ясно, каким он должен быть - возможно:

elementBolumler.length

как в:

function bolumleriGonder() {
    for (i = 0; i < bolumlerUnique.length; i++) {
        elementBolumler = $("[bolumid=" + bolumlerUnique[i] + "]:checked");
        console.log(elementBolumler);
        for (j = 0; j < elementBolumler.length; j++) {
            console.log(elementBolumler[j])
        }
    }
}
1 голос
/ 22 марта 2019

Проверьте, что ваша переменная len имеет значение, которое должно работать с вашими кодами.

0 голосов
/ 22 марта 2019

const checkboxesIWantToMessWith = [2, 4, 6]

checkboxesIWantToMessWith.forEach(id => {
  const checkbox = document.querySelector(`input[bolumid="${id}"]`)
  if (checkbox.checked) {
    // Do my stuff
    console.log(`checkbox bolumid="${id}" is checked`)
  } else {
    // Do other stuff
    console.log(`checkbox bolumid="${id}" is NOT checked`)
  }
})
<input type="checkbox" bolumid="1" checked />
<input type="checkbox" bolumid="2" checked />
<input type="checkbox" bolumid="3" checked />
<input type="checkbox" bolumid="4"  />
<input type="checkbox" bolumid="5" checked />
<input type="checkbox" bolumid="6" checked />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...