在javascript中推送json数组
我正在定制一些在javascript中推送json数组,javascript,jquery,arrays,push,Javascript,Jquery,Arrays,Push,我正在定制一些jQuery插件,但有一条错误消息我无法理解 var totHistory=0; var positions = new Array(); $('.someclass').each(function(index){ var tmp = $(this).val(); addHistory({id:tmp}); }); function addHistory(o
jQuery
插件,但有一条错误消息我无法理解
var totHistory=0;
var positions = new Array();
$('.someclass').each(function(index){
var tmp = $(this).val();
addHistory({id:tmp});
});
function addHistory(obj)
{
/* Gets called on page load for each comment, and on comment submit */
totHistory++;
positions.push(obj.id);
}
在通过.someClass
的第一次迭代中,我得到了以下消息
Cannot call method 'push' of undefined
有人能解释一下原因吗?您应该将
positions
作为参数发送,或者在addHistory
可访问的范围内声明它。您不应该在没有var关键字的情况下声明它,因为这被认为是一种不好的做法
请尝试我的第一个建议,因为这是我唯一可以在不知道其他js代码结构的情况下帮助您的建议。应该可以适用于我范围似乎正确,检查您是否覆盖或删除您的var位置。基本上,“推送”是数组对象的一种原型方法,错误意味着在您的案例中“位置”不是数组对象,而是未定义的,由于未定义,它没有“push”方法。你指的是哪个元素。someclass,因为val不会对每个元素都起作用。也许告诉/标记你试图修改的插件或显示更多代码,我们将更能帮助你,我真的不认为错误在那块代码中。所有这些代码都在任何函数中吗?正因为如此,var头寸不会像@SteveP在其回答中所建议的那样位于全局范围内,我认为这是在OP的代码示例中的根级别上,
positions
是在可供addHistory
访问的范围内声明的。另外,它是使用var
声明的。是的,看起来是这样,但是如果是这样的话,该错误不应该出现,可能他遗漏了代码。var
关键字建议是因为人们发布了其他答案。