@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, и при последующем обращении к элементу будет его отображать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы