尝试显示随机任务时出现对象HTMLInputElement错误

时间:2014-09-24 06:22:49

标签: javascript arrays parseint

所以我试图从我创建的数组中显示和随机字符串。我的消息的计数部分工作,它应该显示的第二部分和我的数组中的随机任务显示错误。我没有正确使用parseInt和Math.random函数吗?我不必舍入数字,因为parseInt会将它转换为整数吗?

var tasks = []; 

// Function called when the form is submitted.
// Function adds a task to the global array.
function addTask() {
    'use strict';

    // Get the task:
    var task = document.getElementById('task');

    // Reference to where the output goes:
    var output = document.getElementById('output');

    // For the output:
    var message = '';

    if (task.value) {

        // Add the item to the array:
        tasks[tasks.length] = task;

        var randomNum = tasks.length;
        var randomTask = parseInt((Math.random() * randomNum), 10);
        var randomMsg = tasks[randomTask];


        // Update the page:
        message = 'You have ' + tasks.length + ' task(s) in your to-do list.\n';
        message += 'Random Task: ' + randomMsg;

        if (output.textContent !== undefined) {
            output.textContent = message;
        } else {
            output.innerText = message;
        }

    } // End of task.value IF.

    // Return false to prevent submission:
    return false;

} // End of addTask() function.

// Initial setup:
function init() {
    'use strict';
    document.getElementById('theForm').onsubmit = addTask;
} // End of init() function.
window.onload = init;

1 个答案:

答案 0 :(得分:0)

下面:

        tasks[tasks.length] = task;

您正在添加对数组输入的引用。因此,每次运行时,都会添加对同一输入的另一个引用。也许你的意思是:

        tasks[tasks.length] = task.value;

所以任务是一个任务名称数组。其余的应该没问题,但我会使用:

        tasks.push(task.value);

if (typeof output.textContent == 'string') {
  output.textContent = message;
} else {
  output.innerText = message;
}