У меня есть 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. Я также попытался использовать данные ("сумма", значение), но это приводит к той же ошибке - никаких "данных" метода.
Если по значению "в разметке" вы подразумеваете использование функции "просмотр источника" браузера, то вы смотрите на источник страницы, он не обновляется, чтобы отражать изменения DOM (это источник, а не текущий документ).
Используйте веб-инспектор или отладчик, чтобы узнать, как выглядит текущий DOM как разметка, или получить свойство innerHTML формы.
Кроме того, вы должны объявить все эти переменные с var, чтобы они были локальными.
stripe
- это ссылка на объект dom, а не объект jQuery ... try$(stripe).attr('data-amount', nextSubTotal)
... но ваш код должен работать нормально, см. jsfiddle.net/arunpjohny / Szy8V / 1parseInt($(this).data("price"));
не является необходимым, так как jQuery уже делает это для вас. Используйтеattr()
если вы хотите разобрать int самостоятельно.