我的目标是实现以下目标:
isClicked
更改为true isClicked
设置为True时,运行return getCheckedBoxes("checkboxes");
,它将仅获取已选中的复选框仅此而已!问题是我正在从Python脚本调用此脚本,因此我需要使用await
阻止Python脚本运行。我不太了解JS,但我设法做到了以下几点:
var isClicked = false;
document.getElementById("btn-id").addEventListener("click", function () {
document.getElementById("modal").style.display = "none";
isClicked = true;
});
function getCheckedBoxes(checkboxName) {
var checkboxes = document.getElementsByName(checkboxName);
var checkboxesChecked = [];
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(Number(checkboxes[i].id));
}
}
return checkboxesChecked.length > 0 ? checkboxesChecked : null;
};
let promise = await new Promise((resolve, reject) => {
if (isClicked == true)
resolve(promise)
});
return getCheckedBoxes("checkboxes");
脚本在let promise = ...
行上停止,这是一个好兆头。但是当isClicked
设置为true时,我不知道如何解决承诺,以便脚本的其余部分可以(即,我可以运行return getCheckedBoxes("checkboxes");
)。
答案 0 :(得分:0)
您正在寻找的方法很不方便。您可以在调用回调时解决承诺,而不是解决布尔更改的承诺。
此答案确实假定代码位于async function
中。请注意,返回值async function
永远是新的承诺。
// the line below waits until the click callback is called
await new Promise(resolve => {
document.getElementById("btn-id").addEventListener("click", function () {
document.getElementById("modal").style.display = "none";
resolve();
});
});
var checkboxes = document.getElementsByName(checkboxName);
var checkboxesChecked = [];
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(Number(checkboxes[i].id));
}
}
return checkboxesChecked.length > 0 ? checkboxesChecked : null;
答案 1 :(得分:0)
您只能在异步函数中执行await
,请确保在此处运行它。
而且您要检查一次isClicked是否为true,因此承诺将永远无法解决。
async function submitBox() {
var submit;
document.getElementById("btn-id").addEventListener("click", function () {
document.getElementById("modal").style.display = "none";
submit();
});
function getCheckedBoxes(checkboxName) {
var checkboxes = document.getElementsByName(checkboxName);
var checkboxesChecked = [];
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(Number(checkboxes[i].id));
}
}
return checkboxesChecked.length > 0 ? checkboxesChecked : null;
};
let promise = await new Promise((resolve, reject) => {
submit = resolve;
});
return getCheckedBoxes("checkboxes");
}