[英]How to print the result of a JavaScript function
我正在努力將功能的結果打印到屏幕上。
該函數有效,它基於整數計算斐波那契序列。
但是我不知道如何使用innerHTML顯示它。
這是代碼:
var number = document.getElementsByClassName('enter')[0].value; var a = parseInt(number); function fib(a) { if (a <= 1) return 1; return fib(a - 1) + fib(a - 2); var print = document.getElementsByClassName('sequence').innerHTML = a; }
<form action="" class="form"> <input type="number" min="1" max="10" placeholder="enter a number (max of 50)" class="enter"> <input onclick="fib()" type="submit"> </form> <p class="sequence"></p>
算法的問題在於您正在使用遞歸來查找序列。 這是非常昂貴的操作,因為它執行許多操作。 使用它,很容易超過maximum call size
。
更好的選擇是創建一個帶有數字的數組,並僅采用最后一個和倒數第二個來填充數組。 使用這種方法,您最多可以輸入1,000個數字,並幾乎立即獲得結果。 在這里嘗試。
var sequence = document.getElementById("sequence"); var btn = document.getElementById("getSequence"); function fib(a) { var numbers = [1,1]; var num = +(document.getElementById("num").value); if (num) { while (numbers.length < num) { numbers[numbers.length] = numbers[numbers.length - 1] + numbers[numbers.length - 2]; } sequence.innerHTML = numbers.join(','); } else { sequence.innerHTML = "Select a number first "; } } btn.addEventListener("click", function() { var input = +(document.getElementById("num").value); fib(input); });
<input type="number" id="num" min="1" max="1000" /> <button id="getSequence">Get Sequence</button> <p id="sequence"></p>
首先,您在fib(Number)
函數中缺少fib(Number)
括號; 這可能是一個錯字。 您還缺少類定義中HTML的最后一行中的引號。
該錯誤發生在var print...
行中。 document.getElementsByClassName(class)
返回具有class class
的所有HTML對象的數組。 因此,返回值沒有屬性innerHTML
,因此您應該在該位置出現錯誤。
有兩種簡單的解決方案。
1-從數組中獲取一個元素
document.getElementsByClassName('sequence')[0].innerHTML = a;
2-為<p>
元素分配一個ID
<p class="sequence" id="out"></p>
=================================================================================
document.getElementById("out").innerHTML = a;
由於要設置innerHTML,最后一行很奇怪。 試試這個:
document.getElementsByClassName('sequence').innerHTML = fib(a);
沒錯,它不會從摘要中編譯。
在很大程度上,您的問題在這里:
var print = document.getElementsByClassName('sequence').innerHTML = a;
兩件事情:
1)您不需要設置變量來打印或更改html類。 因此,不確定“打印”是什么意思,但是.innerHTML是使用它的getter或setter方法。 我認為您的意思是更改此變量的值,以使輸出流入“序列”。
2)“ id”用於單個元素,“ class”用於一組元素。 我猜您對前者更感興趣。 所以:
document.getElementById('sequence').innerHTML = a;
...如果我正確地理解了您的問題,應該會完成您要執行的任務。
print是一個內置函數,因此您不能對其進行設置(或者至少不應該這樣做),而且getElementsByClassName返回必須循環通過的數組
var p = document.getElementsByClassName('sequence');
var i;
for( i = 0 ; i < p.length ; i++ ){ p[i].innerHTML = 1234; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.