我正在用js制作一個檢查素數的函式。我想在函式執行時,讓狀態的textContent顯示 "處理"(尋找質數)。
然而,我的代碼不再起作用了
下面是我的代碼。
。 let start = performance.now()
let time = document.getElementById('time'/span>)
let texts = document.getElementById('text')
let amount = document.getElementById('mount')
let status = document.getElementById('status')
function checkprimenumber(){
let start = performance.now()
let value = texts.value。
if(value ==''/span>){
value = texts.placeholder。
}
for (let i = 0;i< value;i ){
time.textContent = ' '
amount.textContent = ''
var nums = 2;
for (let x = 0; x<=i/2; x ){
if(nums>3){
break。
}
if(i!==0 && i!==1 && i !==x){
if(i%x === 0){
nums ;
}
}
}
if(nums ==3){
amount.textContent = parseFloat( amount.textContent) 1.
}
if(i ==value-1){
status.textContent = 'done'。
console.log('got it')
let end = performance.now()
time.textContent = (end-start).toFixed(3)
}
}
}
checkprimenumber()
。
<h1>獲取總理號碼的申請:</h1>
<h2>素數。<span>< /span></h2>/span>
<h3>/span>處理時間。<span id = 'time'/span>> 0</span> ms</h3>/span>
<h3>號碼。<span id = '金額'> 0</span></h3>
<h3>/span>狀態。<span id = 'status'/span>> 處理</span></h3>
<label for = 'text'/span>> 輸入你想得到的數字范圍</label>。
< input type = 'text'/span> id = 'text' placeholder = '100000'>
< input type = 'button' id = 'button' value = 'set' onclick = 'checkprimenumber() ' >
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
status.textContent從未顯示 "處理",即使我輸入了一個非常大的數字。
為什么會發生這種情況?
對于amount.textContent,我所期望的是,當function被執行時,它可以被添加。然而,amount.textContent只在function完成執行時回傳金額。
有人知道為什么會發生這個問題嗎?
我已經在這個問題上糾結了很久了。
謝謝大家。
謝謝你的回應和支持。
uj5u.com熱心網友回復:
用戶界面將不會更新,直到javascript運行完畢。你可以通過使用setTimeout();
來給它時間來更新UI。 。let start = performance.now();
let time = document.getElementById('time'/span>) 。
let texts = document.getElementById('text') 。
let amount = document.getElementById('mount')。
let status = document.getElementById('status') 。
function checkprimenumber() {
status.textContent = ' processing';
///稍后執行計算,留下時間讓GUI更新。
setTimeout(function(){ reallycheckprimenumber(); }, 10) 。
}
function reallycheckprimenumber() {
let start = performance.now()。
let value = texts.value。
if (value == ''/span>) {
value = texts.placeholder。
}
for (let i = 0; i < value; i ) {
time.textContent = ' '
amount.textContent = ''
var nums = 2;
for (let x = 0; x <= i / 2; x ) {
if (nums > 3) {
break;
}
if (i !== 0 && i !== 1 & & i !== x) {
if (i % x === 0) {
nums ;
}
}
}
if (nums === 3) { nums ; }
amount.textContent = parseFloat( amount.textContent) 1;
}
if (i ==value - 1) {
status.textContent = 'done'/span>;
console.log('got it')。
let end = performance.now()。
time.textContent = (end - start).toFixed(3)。
}
}
}
checkprimenumber();
<h1>獲取Prime number應用。 </h1>獲取質數應用:</h1>
<h2>素數。<span>< /span></h2>/span>
<h3>/span>處理時間。<span id = 'time'/span>> 0</span> ms</h3>/span>
<h3>號碼。<span id = '金額'> 0</span></h3>
<h3>/span>狀態。<span id = 'status'/span>> 處理</span></h3>
<label for = 'text'/span>> 輸入你想得到的數字范圍</label>。
< input type = 'text'/span> id = 'text' placeholder = '100000'>
< input type = 'button' id = 'button' value = 'set' onclick = 'checkprimenumber() ' >
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
UI是用戶界面。setTimeout使代碼稍后執行而不是立即執行。(https://www.w3schools.com/jsref/met_win_settimeout.asp) 。如果代碼立即執行,那么用戶界面將不會更新,因為瀏覽器正忙于執行代碼。將其設定為稍后執行意味著代碼會短暫停止運行,界面會更新,然后代碼會在稍后再次執行。
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/326647.html
標籤:
上一篇:如何用墨汁填充在飄逸中
下一篇:從字典串列中洗掉單個值
