【问题标题】:Javascript/jQuery - "Cannot call method 'push' of undefined" while it IS definedJavascript/jQuery - 定义时“无法调用未定义的方法‘push’”
【发布时间】:2012-08-09 20:10:12
【问题描述】:

在一个简单的脚本中,它遍历了一些表单字段,获取用户输入并将其存储到我遇到问题的数组中。

当我这样做时它会起作用:

var q1A = parseFloat($('#q1-1').val());
if(isNaN(q1A)) {
    var q1A = 0;
}
parameter.push(' ');
answers.push(q1A);

但是现在我添加了另一个数组,在这种情况下,它应该简单地存储相同的 q1A 变量。但不知何故,我最终得到一个“未捕获的类型错误”,说明变量未定义!新的代码块是:

var q1A = parseFloat($('#q1-1').val());
if(isNaN(q1A)) {
    var q1A = 0;
}
input.push(q1A);
parameter.push(' ');
answers.push(q1A);

我在控制台中记录了变量,它工作得很好,它已经设置并有一个值。知道为什么它说它是未定义的吗? 'answers' 数组可以很好地存储值。

提前致谢!

编辑:

当然,我定义了变量。我只是没有发布那部分代码...

var groups = new Array();
var questions = new Array();
var input = new Array();
var parameter = new Array();
var answers = new Array();
var amounts = new Array();

【问题讨论】:

  • input 不是数组,不能推送到任何变量,只能推送到之前定义的数组。
  • 我定义了那些。立即将其添加到帖子中。
  • 对我来说非常好用:jsfiddle.net/mP6NT/1。如果我们无法复制错误,我们将很难为您提供帮助。请创建您自己的 jsfiddle.net 演示来显示此问题。
  • 好的,谢谢。我会尝试在那里重现错误并回复给你们!
  • 为什么要在 if 块中重新声明变量 q1A?

标签: javascript jquery arrays


【解决方案1】:

由于可以将未定义的变量推送到数组中而不会出错,因此问题一定是在您尝试对其调用push() 时未定义input

这个问题的通常原因是在另一个地方声明了变量input,并且它从未在意外的地方初始化。

【讨论】:

  • 这是关于输入数组的,答案工作正常。但无论它是哪一个,如果我删除输入数组,一切都会正常工作。但是当我添加它时,该函数会在它第一次推送到该数组时停止。我只在函数开始时声明了一次数组。我正在尝试在 jsfiddle 中重现问题。
  • 在您的代码中搜索var input;我敢肯定,您至少会找到一个出乎意料的结果。
  • 好吧,没关系。毕竟你是对的。谢谢!然而,我确实在发生错误之后再次声明了输入。
  • var 有函数作用域; JavaScript 中没有块级作用域。见stackoverflow.com/questions/500431/javascript-variable-scope
【解决方案2】:

首先你必须定义为数组。

var   input=[];

然后尝试推动元素。

input.push(element); 

【讨论】:

  • 我已经声明了数组,只是没有发布那部分代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多