【问题标题】:How to print the result of a JavaScript function如何打印 JavaScript 函数的结果
【发布时间】:2016-11-22 22:40:00
【问题描述】:

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

该函数有效,它根据整数计算斐波那契数列。

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

【问题讨论】:

  • 您想稍微清理一下您的代码吗?就像现在一样,它甚至不会编译,正如您从 sn-p... 看到的那样......

标签: javascript function innerhtml


【解决方案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>

【讨论】:

    【解决方案2】:

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

    错误发生在var print... 行中。 document.getElementsByClassName(class) 返回一个包含类 class 的所有 HTML 对象的数组。因此,返回值没有innerHTML 属性,所以你应该在那里得到一个错误。

    有两种简单的解决方案。

    1 - 从数组中获取一个元素

    document.getElementsByClassName('sequence')[0].innerHTML = a;
    

    2 - 为 &lt;p&gt; 元素分配一个 ID

    <p class="sequence" id="out"></p>
    =================================================================================
    document.getElementById("out").innerHTML = a;
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 这是错误的,因为className 返回一个集合,而不是单个元素
      【解决方案4】:

      确实它不会从 sn-p 编译。

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

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

      两件事:

      1) 您不需要设置变量来打印或更改 html 类。所以不确定“打印”是什么意思,但 .innerHTML 是 getter 还是 setter 取决于它的使用方式。我认为您的意思是更改此变量的值以使输出流入“序列”。

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

      document.getElementById('sequence').innerHTML = a; 
      

      ...如果我正确理解您的问题,应该可以完成您的任务。

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-26
          • 2017-05-18
          • 2019-01-02
          • 2017-05-07
          相关资源
          最近更新 更多