javascript 更新模态表单元素,而 ui 由于代码执行而被阻止
javascript update modal form element whilst the ui is blocked due to code execution
好的,我看过很多很多关于这个的文章。但到目前为止,我还没有任何工作。所以这是我对这个问题的看法。
我在 select 选项中有一个包含 ID 的员工姓名列表,以及一个按钮,单击该按钮时,会为 select
中的每个选项调用一个例程
$(document).on("click", ".js-button-update-all-drivers", function (e) {
e.preventDefault();
myApplication.busy(true);
$("#modalInfo-body span").text("Starting update ...........");
$('.modalInfo-header .title').text("Information");
var modal = document.getElementById('modalInfo');
myApplication.openModal(modal);
var selected = document.getElementsByClassName('js-dropdown-selector');
for (var i = 0; i < selected[0].options.length; i++) {
var Id = selected[0].options[i].value;
$("#modalInfo-body span").text("Updating - " + Id);
doWork(Id);
}
myApplication.closeModal(modal);
myApplication.busy(false);
});
这会调用定义为 async/wait
的函数调用 doWork
async function doWork(employeeId, taxWeek, taxYear) {
try {
const response = await processUpdate(Id);
} catch (err) {
$("#modalInfo-body span").text("Report Error - Thank you.");
}
}
依次调用以下函数:
function processUpdate(Id) {
return new Promise((resolve, reject) => {
$.ajax({
url: '/myTest',
async: false,
data: {
Id: Id
},
method: 'post',
dataType: 'json',
success: function(retData) {
if (retData === false) {
resolve('Completed');
} else {
reject('An error has occurred, please send a screen shot');
}
},
error: function(xhr, error) {
reject('An error has occurred, please send a screen shot'); }
});
});
}
尽管此代码有效,但元素 $("#modalInfo-body span") 在 doWork 函数周围循环时未更新。
我的屏幕上已经有一个微调器,但我正在寻找更直观的帮助来了解这是如何进行的。
好的,我要开始说我知道浏览器是单线程的,这并不容易。
我确实尝试了回调,但没有完全奏效,因为我在更新屏幕时遇到了延迟。
所以最终,我用一个简单的微调器代替了它。
感谢所有花时间来看这个的人。
好的,我看过很多很多关于这个的文章。但到目前为止,我还没有任何工作。所以这是我对这个问题的看法。
我在 select 选项中有一个包含 ID 的员工姓名列表,以及一个按钮,单击该按钮时,会为 select
中的每个选项调用一个例程$(document).on("click", ".js-button-update-all-drivers", function (e) {
e.preventDefault();
myApplication.busy(true);
$("#modalInfo-body span").text("Starting update ...........");
$('.modalInfo-header .title').text("Information");
var modal = document.getElementById('modalInfo');
myApplication.openModal(modal);
var selected = document.getElementsByClassName('js-dropdown-selector');
for (var i = 0; i < selected[0].options.length; i++) {
var Id = selected[0].options[i].value;
$("#modalInfo-body span").text("Updating - " + Id);
doWork(Id);
}
myApplication.closeModal(modal);
myApplication.busy(false);
});
这会调用定义为 async/wait
的函数调用 doWorkasync function doWork(employeeId, taxWeek, taxYear) {
try {
const response = await processUpdate(Id);
} catch (err) {
$("#modalInfo-body span").text("Report Error - Thank you.");
}
}
依次调用以下函数:
function processUpdate(Id) {
return new Promise((resolve, reject) => {
$.ajax({
url: '/myTest',
async: false,
data: {
Id: Id
},
method: 'post',
dataType: 'json',
success: function(retData) {
if (retData === false) {
resolve('Completed');
} else {
reject('An error has occurred, please send a screen shot');
}
},
error: function(xhr, error) {
reject('An error has occurred, please send a screen shot'); }
});
});
}
尽管此代码有效,但元素 $("#modalInfo-body span") 在 doWork 函数周围循环时未更新。
我的屏幕上已经有一个微调器,但我正在寻找更直观的帮助来了解这是如何进行的。
好的,我要开始说我知道浏览器是单线程的,这并不容易。
我确实尝试了回调,但没有完全奏效,因为我在更新屏幕时遇到了延迟。
所以最终,我用一个简单的微调器代替了它。
感谢所有花时间来看这个的人。