将HTML中的表单文本转换为JS中的数组

时间:2015-06-19 08:20:33

标签: javascript html arrays forms

我正在尝试为最大的子阵列问题创建一个在线求解器。 https://en.wikipedia.org/wiki/Maximum_subarray_problem

我计划从文本框中获取用户输入的数字并将它们转换为JS中的int数组,但是我的JS似乎根本没有运行。 这是我的HTML

<!DOCTYPE html>
<html>
    <head>
        <title> findMaxSum </title>
        <script src="findMaxSum.js" type="text/javascript"></script>
    </head>

    <body>
        <h1> findMaxSum </h1>
        <form id="formarray" action="">
            <p> Enter numbers with spaces, i.e. "1 2 3 4 5": </p>
            <input type="text" id="array"> <br>
            <button id="sum">findMaxSum!</button>
            <br>
        </form>
        <p id="answer">The answer is: </p>
    </body>
</html>

和我的JS。注意:代码的map(function(item))部分旨在将字符串从表单拆分为int数组。

"use strict";

function findMaxSum() {
    var array = document.getElementById("array").split(" ").map(function(item) {
        return parseInt(item, 10);
    });
    var sumButton = document.getElementById("sum");
    sumButton.onclick = findMaxSum;
    var loopSum = 0;
    var currentMax = 0;
    for (var i = 0; i < array.length; i++) {
        loopSum += array[i];
        if (currentMax < loopSum) {
            currentMax = loopSum;
        } else if (loopSum < 0) {
            loopSum = 0;
        }
    }
    document.getElementById("answer").innerHTML = "The answer is: " + currentMax;
}

window.onload = findMaxSum;

目前,当我在文本框中输入数字并提交时,数字会消失并且没有任何反应。非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

问题是你在表单中使用了按钮,默认情况下是类型submit类型,这就是为什么页面变为空白,它被提交的原因。因此,要么您不使用表单标记,要么将按钮设置为按钮类型。

<button id="sum" type='button'>findMaxSum!</button> <!-- type attribute added -->

以下是示例更新代码,希望对您有所帮助。

&#13;
&#13;
"use strict";

function findMaxSum() {
  var array = document.getElementById("array").value.split(/\s/);
  var max = Math.max.apply(Math, array);
  document.getElementById("answer").innerHTML = "The answer is: " + max;
}

window.onload = function() {
  document.getElementById("sum").onclick = findMaxSum;
};
&#13;
<h1> findMaxSum </h1>
<form id="formarray" action="">
  <p>Enter numbers with spaces, i.e. "1 2 3 4 5":</p>
  <input type="text" id="array">
  <br>
  <button id="sum" type='button'>findMaxSum!</button>
  <br>
</form>
<p id="answer">The answer is:</p>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

更改您的代码 -

 test.$watch('varFromRequest', function(new_value, old){
  $scope.varFromRequest = test.varFromRequest;

})

答案 2 :(得分:1)

您的array变量为object。您必须将<input type="text" id="array">的值拆分为对象元素。

var array = document.getElementById("array");
    array = array.value.split(" ").map(function (item) {
    return parseInt(item, 10);
});

或更简单:

var array = document.getElementById("array").value.split(" ").map(function (item) {
    return parseInt(item, 10);
});

答案 3 :(得分:0)

要实现问题的解决方案,您需要进行以下更改。

  1. 更新事件绑定位置

    window.onload = function() {
        var sumButton = document.getElementById("sum");
        sumButton.onclick = findMaxSum;
    };
    
    function findMaxSum() {
        // remove the update binding code from here
        // logic should come here
    }
    
  2. 解决JS错误

    document.getElementById("array").value.split(" ")
    
  3. 更新html以避免页面刷新(添加类型)

    <button id="sum" type='button'>findMaxSum!</button>
    
  4. 更新解决问题的逻辑

    var currentMax = 0;
    for (var i = 0; i < array.length; i++) {
        var counter = i+1;
        while (counter < array.length) {
          var loopSum = array[i];
          for (var j = (i+1); j <= counter; j++) {
            loopSum += array[j];
            if(loopSum > currentMax) {
               currentMax = loopSum;
            }
          }
          counter++;
        }
    }
    
  5. 这是一个吸虫 - http://plnkr.co/edit/AoPANUgKY5gbYYWUT1KJ?p=preview