未捕获的TypeError:对象在第二次刷新后不是函数

时间:2014-11-28 22:26:16

标签: javascript jquery

目前我正面临着一个javascript问题。这是javascript代码:

$(document).ready(function() {
    /*
        createNewTodo("_OPDRACHT_", "_PRIO_", "_DONE_");

        _OPDRACHT_  =   wat er gedaan met worden.
        _PRIO_      =   prioriteit 1-5 (1 is hoogste, 5 is laagste)
        _DONE_      =   uitgevoerd 1-2 (1 is nee, 2 is ja
    */

    function todo(opdracht,prio,done) {
      this.opdracht = opdracht;
      this.prio = prio;
      this.done = done;
    }

    function createNewTodo(opdracht,prio,done) {
      var createdTodo = new todo(opdracht,prio,done);
      if ( localStorage.todoCount == undefined ) {
          localStorage.setItem('todoCount', 0) 
      }
      var todoSize = parseInt(localStorage.todoCount) + 1;
      commitToStorage(todoSize,createdTodo);
    }

    function addList(){
        var val = $('#name').val();
        var tjap = createNewTodo(val,"1","1");
    }

    function commitToStorage(objectCount,newObject) {

      var item = + objectCount;
      localStorage.setItem('todoCount', objectCount);

      localStorage.setItem(item, JSON.stringify(newObject));
    }

    var todoCount = localStorage.getItem('todoCount');  
    for (i=1;i<=todoCount;i++)
      {
        var number = parseInt(i) + 1;
        var todo = jQuery.parseJSON(localStorage.getItem(+ i));
        createMarkup(todo);
      } 

    function createMarkup(todo) {
      $('ul#items').append(
        "<li>" + 
          todo.opdracht + " " +
        "</li>"
      );
    }

    $('#add-btn').click(addList);

});

当我点击add-btn时,它会在localstorage中插入一个带有值数组的项目。在刷新页面之前,一切正常。我第一次可以在localstorage中添加任意数量的项目而没有问题,但是当我在刷新页面后尝试添加项目时,我收到以下错误:未捕获TypeError:对象不是函数。在互联网上搜索了很多,但无法找到合适的解决方案。有谁可以帮助我并推动我朝着正确的方向前进?提前谢谢。

1 个答案:

答案 0 :(得分:0)

for循环中没有单独的局部作用域,因此您要将一个对象分配给先前声明为函数的名为todo的变量,而不是创建一个具有相同名称的新局部变量。存储您的待办事项数据。

您可以阅读有关此特定主题以及大多数功能和“陷阱”的更多信息。 http://bonsaiden.github.io/JavaScript-Garden/#function.scopes上的语言。我强烈建议你阅读整个页面,这将为你节省很多时间。