@danyarob

Почему разные значений аттрибутов?

У меня есть список, в каждом хранится аттрибуты data-key, равные значению позиции элемента( то-есть, первый блок = 0, второй 1).
<input name="col_items_input" type="number" data-price="'.$row["price"].'" data-key="'.$i.'" value="'.$_SESSION['quantity'][$i].'" onchange="changecol(this)">
При удалении блока, последующий от удаленного меняется на -1
for(let i = $(element).data('key'); i < document.querySelectorAll(".main-list").length; i++){
        (document.getElementsByName('col_items')[i].dataset.key)-=1;
        (document.getElementsByName('col_items_input')[i].dataset.key)-=1;
        (document.getElementsByName('btn-delete-js')[i].dataset.key)-=1;
        
      }


В коде элемента он показывает все верно, но если обратиться к нему через код, то там не меняется значение

function changecol(element)
{
console.log($(element).data('key'));
}

Все бы ничего, но когда я меняю количество, то считая от удалённого, дата кей не меняется, и поэтому выдается ошибка в консоли, и ничего не работает
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
У меня есть подозрение, что jQuery.data() читает не elem.dataset.key, а что-то другое.
При старте оно точно из атрибута data-key="" будет инициализироваться, а не из значения в dataset.

UPD: вчера с телефона писал ответ, а сейчас есть возможность проверить гипотезу


Видно что jQuery где-то кеширует значение дата-атрибута.

Причем если менять значение через jQuery.data() то ни атрибут ни dataset не изменятся.
Если закомментировать строки 7-13, то при первом обращении к DOM-элементу jQuery подтянет текущее значение (1).
А если строку 7 не закомментировать, то он запомнит значение 1, и при последующем обращении к элементу будет его отображать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 00:16
2000 руб./за проект
22 нояб. 2024, в 23:55
3000 руб./за проект
22 нояб. 2024, в 22:26
3500 руб./за проект