簡體   English   中英

如何打印JavaScript函數的結果

[英]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);

資料來源: http : //www.w3schools.com/jsref/jsref_return.asp

沒錯,它不會從摘要中編譯。

在很大程度上,您的問題在這里:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM