Обновление: я решил это, создав новую переменную, использовал ее и присвоил этой переменной finalPrice.
Улучшение вопроса, поскольку я думаю, что это можно сделать по-другому
Я хочу получить доступ к значению finalPrice, определенному здесь чуть выше функции add_to_download_entries:
var counts = 1;
var checkboxes;
var finalPrice;
Приведенная выше finalPrice, к которой я хочу получить доступ и присвоить это значение внутренней функции payModal вместо finalPrice = 4444, должно быть значением, поступающим из finalPrice из приведенной выше переменной finalPrice, определенной над функцией add_to_download_entries. поэтому, когда я делаю finalPrice = "Pay Now $" + Number(counts) * Number(22); в функции document.ready, я хочу, чтобы это значение finalPrice было присвоено finalPrice = 44; здесь, в функции PayModal() вместо 44, как я могу это сделать?
<script>
// Pay Modal
async function payModal() {
await fetch("{{ route('paymentModal') }}")
.then(response => response.json())
.then(response => {
const form = document.getElementById('payment-form');
_key_for_ss = response.paymentIntent.client_secret;
paymentIntentID = response.paymentIntent.id;
finalPrice = 44;
async function openModal() {
await createCard();
$('#pay-modal').modal('show');
}
openModal();
})
}
var selected_lostwill_array = [];
var counts = 1;
var checkboxes;
var finalPrice;
function add_to_download_entries(data) {
checkboxes = document.querySelectorAll('input[name = "checkWills"]:checked');
counts = checkboxes.length;
if ($.inArray(data, selected_lostwill_array) >= 0){
selected_lostwill_array = $.grep(selected_lostwill_array, function(value){
return value != data;
});
}else{
selected_lostwill_array.push(data);
}
// DataTables Functions
$(document).ready( function () {
$('#org_lost_table').DataTable();
$('#all_lost_table').DataTable();
if (counts>0){
finalPrice = "Pay Now $" + Number(counts) * Number(22);
$( "#payment-sub-btn" ).text(finalPrice);
}else $( "#payment-sub-btn" ).text(0);
} );
}
</script>
К вашему сведению: for = "feCoupon" не имеет отношения к каким-либо элементам в HTML-документе, потому что нет элементов с этим id.
Внутренний текст @RinsadAhmed также получает весь текст $ pay now, но мне нужно только значение, равное 22 или 44 и т. д. после «pay now $44»



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я решил это, создав новую переменную с именем finalPrices и присвоив значение finalPrices finalPrices = Number(counts) * Number(22);, поэтому теперь он не получает текст, а просто целочисленное значение.
var finalPrices;
async function payModal() {
await fetch("{{ route('paymentModal') }}")
.then(response => response.json())
.then(response => {
const form = document.getElementById('payment-form');
_key_for_ss = response.paymentIntent.client_secret;
paymentIntentID = response.paymentIntent.id;
finalPrice = finalPrices;
async function openModal() {
await createCard();
$('#pay-modal').modal('show');
}
openModal();
})
}
function add_to_download_entries(data) {
checkboxes = document.querySelectorAll('input[name = "checkWills"]:checked');
counts = checkboxes.length;
if ($.inArray(data, selected_lostwill_array) >= 0){
selected_lostwill_array = $.grep(selected_lostwill_array, function(value){
return value != data;
});
}else{
selected_lostwill_array.push(data);
}
// DataTables Functions
$(document).ready( function () {
$('#org_lost_table').DataTable();
$('#all_lost_table').DataTable();
if (counts>0){
finalPrices = Number(counts) * Number(22);
finalPrice = "Pay Now $" + Number(counts) * Number(22);
$( "#payment-sub-btn" ).text(finalPrice);
}else $( "#payment-sub-btn" ).text(0);
} );
}
Хотя ваше собственное решение правильное, оно не самое лучшее.
Вам не нужно заключать число в Number(). Вы также должны сохранить вычисленное значение в переменной (как вы делаете), а затем ссылаться на это значение.
В качестве плюса вы можете использовать новые функции языка JavaScript, чтобы избежать запутанного использования + в конкатенации строк. Вместо этого вы можете использовать литералы шаблонов:
`${finalPrices}`
Таким образом, результирующий код с этими изменениями будет выглядеть так:
let finalPriceValue;
let finalPriceText;
function add_to_download_entries(data) {
// ...
// ...
if (counts>0){
finalPriceValue = Number(counts) * 22;
finalPriceText = `Pay Now $${finalPriceValue}`;
$( "#payment-sub-btn" ).text(finalPrice);
}
}
Пожалуйста, попробуйте .innerText вместо .textContent