如何打印JavaScript函数的结果

时间:2016-07-19 21:13:01

标签: javascript function innerhtml

我正在努力将功能的结果打印到屏幕上。

该功能有效,它根据整数计算fibonaaci序列。

但我不知道如何使用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>

5 个答案:

答案 0 :(得分:1)

算法的问题在于您使用递归来查找序列。这是一项非常昂贵的操作,因为它执行许多操作。使用它,很容易超过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>

答案 1 :(得分:0)

首先,你在fib(Number)函数中缺少一个近似括号;这可能是一个错字。您还缺少类定义中HTML的最后一行的结束引号。

错误发生在var print...行。 document.getElementsByClassName(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;

答案 2 :(得分:0)

你最后一行很奇怪,因为你想设置innerHTML。试试这个:

document.getElementsByClassName('sequence').innerHTML = fib(a);

来源:http://www.w3schools.com/jsref/jsref_return.asp

答案 3 :(得分:0)

是的,它不能从代码片段中编译。

很大程度上你的问题在这里:

var print = document.getElementsByClassName('sequence').innerHTML = a;

两件事:

1)您无需设置要打印的变量或更改html类。所以不确定“打印”是什么意思,但.innerHTML取决于它的使用方式是一个吸气剂或设定器。我认为您的意思是更改此变量的值以使输出流入'sequence。';

2)“id”用于单个元素,“class”用于一组元素。我猜你对前者更感兴趣。所以:

document.getElementById('sequence').innerHTML = a; 
如果我理解你的问题,

......应该完成你所追求的目标。

答案 4 :(得分:0)

print是一个内置函数,所以你不能设置东西(或者至少你不应该),getElementsByClassName也返回一个必须循环的数组

var p = document.getElementsByClassName('sequence');
var i;
for( i = 0 ; i < p.length ; i++ ){ p[i].innerHTML = 1234; }