Почему он возвращает только первый элемент массива, в то время как я уже напечатал все значения массива?

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

почему,

Я хочу получить значение в html-теге, но он возвращает только первое значение, и я не знаю почему… (Я хочу значение html-тега с классом «iHidden»)

(Мне отлично удается получить значения первого ввода с именем =»service []» в моем javascript)

 while($service = $req->fetch()){ ?>

            <div class="form-control">
              <input type="checkbox" name="service[]" value="<?= $service['price']; ?>" id="<?= $i   ?>">
              <p>id_service : <i class="iHidden"><?= $service['id_service']; ?></i></p>


              <label for="<?= $service['service'] ?>"><?= $service['service']; ?></label>
              <strong><?= $service['price']; ?></strong>
            </div>

    <?php } ?>
  

вот мой javascript :

 for(var i = 0; i <= totalService; i  ){

    if($('#' i).is(":checked")){

        // For the first input (it works)

        var total = $('#' i).val();

        globalTotal = parseInt(globalTotal )  parseInt(total); 

        // End for the first input



        // Here is the problem : it returns only the first value in my database...
        getI[i] = $('.iHidden').html();

        console.log(getI); // shows the first value


    }
}
  

Когда он нажимает на «Калькулятор призовых сервисов», я хочу, чтобы он показывал мне идентификатор сервиса, который я проверил. и если я проверил 2, я хочу, чтобы он показывал мне 2.

Заранее спасибо за помощь!

Комментарии:

1. Вот как работает html() функция

2. Вот изображение, чтобы лучше представить: ibb.co/GTBwNKm

3. «Получите HTML-содержимое первого элемента в наборе сопоставленных элементов или задайте HTML-содержимое каждого сопоставленного элемента.

Ответ №1:

html() Метод возвращает HTML-содержимое первого элемента в коллекции. В вашем случае .iHidden выбираются все элементы с помощью class iHidden .

Из документов:

Получите HTML-содержимое первого элемента в наборе сопоставленных элементов или задайте HTML-содержимое каждого сопоставленного элемента.

Для решения проблемы выберите на основе родительского элемента всего элемента.Где closest() метод может быть использован для получения общего предка и получения iHidden элемента с помощью find() метода.

 getI[i] = $('#' i).closest('.form-control').find('.iHidden').html();
  

К вашему сведению: Из MDN docs:

Примечание: Использование символов, кроме букв ASCII, цифр, ‘_’, ‘-‘ и ‘.’ может вызвать проблемы с совместимостью, поскольку они не были разрешены в HTML 4. Хотя это ограничение было снято в HTML 5, идентификатор должен начинаться с буквы для совместимости.

Поэтому лучше начинать значение id с буквы, а не с цифры.

Например :

PHP

 <input type="checkbox" name="service[]" value="<?= $service['price']; ?>" id="total<?= $i   ?>">
  

JS

 for (var i = 0; i <= totalService; i  ) {
  var $tot = $('#total'   i);
  if ($tot.is(":checked")) {
    var total = $tot.val();
    globalTotal = parseInt(globalTotal)   parseInt(total);
    getI[i] = $tot.closest('.form-control').find('.iHidden').html();
    console.log(getI);
  }
}
  

Комментарии:

1. @pandaD : рад это слышать 🙂