Не удается установить атрибут данных в HTMLScriptObject

0

У меня есть HTMLScriptObject, который я пытаюсь изменить атрибут данных. Мне нужно рассчитать сумму данных и установить это значение, которое используется в скрипте, но мне не повезло. У меня = javascript работает "правильно" (в соответствии с конечным значением в журнале), но я не могу изменить атрибут количества данных в разметке ниже. Вот соответствующая разметка HTML:

<script src="/static/js/filename.js"></script>
<form action="" method="POST">
  <script id="stripe-button"
    src="https://checkout.stripe.com/checkout.js" 
    data-amount="0"
    ...
    >
  </script>
</form>

И вот соответствующее filename.js:

$(document).ready(function(){
    $( ".btn-service" ).click(function(){

        //add service price to the subtotal
        subtotalObj = $( "#subtotal" );
        price = parseInt($(this).data("price"));
        previousSubTotal = parseInt($( "#subtotal" ).text());

        if ($(this).hasClass( "btn-added" )) {
            nextSubTotal = previousSubTotal + price;
            $(this).text("Remove From Cart");
        }
        else if ($(this).hasClass( "btn-add" )) {
            nextSubTotal = previousSubTotal - price;
            $(this).text("Add To Cart");
        }

        //update the values
        subtotalObj.text(nextSubTotal);
        var stripe = document.getElementById('stripe-button');
        stripe.setAttribute('data-amount', nextSubTotal);
        console.log(stripe.getAttribute('data-amount')); //this returns the correct amount.
    });
});

Журнал консоли в конце свойства количества данных возвращает значение, которое я ищу, но когда я смотрю на источник разметки, значение суммы данных все еще равно 0. Не уверен, почему сумма данных не изменяется,

Я также попытался использовать метод attr(), но JQuery выдает сообщение об ошибке: Object # не имеет метода attr. Я также попытался использовать данные ("сумма", значение), но это приводит к той же ошибке - никаких "данных" метода.

  • 0
    ошибки jQuery объясняются тем, что stripe - это ссылка на объект dom, а не объект jQuery ... try $(stripe).attr('data-amount', nextSubTotal) ... но ваш код должен работать нормально, см. jsfiddle.net/arunpjohny / Szy8V / 1
  • 0
    parseInt($(this).data("price")); не является необходимым, так как jQuery уже делает это для вас. Используйте attr() если вы хотите разобрать int самостоятельно.
Показать ещё 3 комментария
Теги:
stripe-payments

1 ответ

0
Лучший ответ

Если по значению "в разметке" вы подразумеваете использование функции "просмотр источника" браузера, то вы смотрите на источник страницы, он не обновляется, чтобы отражать изменения DOM (это источник, а не текущий документ).

Используйте веб-инспектор или отладчик, чтобы узнать, как выглядит текущий DOM как разметка, или получить свойство innerHTML формы.

Кроме того, вы должны объявить все эти переменные с var, чтобы они были локальными.

  • 0
    Спасибо, да, это была комбинация того, что я смотрю на исходный вид, и проблема, когда сторонний инструмент не видит обновленное значение. Проверка элемента показывает правильное значение. Время работать со сторонним инструментом. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню