数组中的Javascript对象
我正在尝试使用Ajax文件上载,如下所示: 如您所见,我需要创建一个qq.FileUploader对象来初始化脚本。但是,我需要能够在不知道元素ID的情况下动态创建这些对象。我尝试过创建这样的东西:数组中的Javascript对象,javascript,arrays,object,Javascript,Arrays,Object,我正在尝试使用Ajax文件上载,如下所示: 如您所见,我需要创建一个qq.FileUploader对象来初始化脚本。但是,我需要能够在不知道元素ID的情况下动态创建这些对象。我尝试过创建这样的东西: var uploader, i = 0; $(".file-upload").each(function() { $e = $(this); i++; uploader[i] = new qq.FileUploader({ element: $(this)[0
var uploader, i = 0;
$(".file-upload").each(function() {
$e = $(this);
i++;
uploader[i] = new qq.FileUploader({
element: $(this)[0],
action: 'uploadfile.php',
allowedExtensions: ['doc', 'docx', 'pdf'],
multiple: false,
onComplete: function(id, fileName, responseJSON) {
$($e).siblings('input').val(responseJSON.newfilename);
}
});
});
我了解到,我添加的[I]
部分破坏了脚本,因为我不能在数组中包含对象
是否有其他方法可以动态创建此对象?它们都需要有一个唯一的名称,否则它们的
onComplete
函数都会被覆盖。我尝试过使用eval()
,但似乎无法使其正常工作。您必须首先将上传程序声明为数组:
var uploader = [];
由于您未定义变量就声明了变量,因此它的默认值为undefined
,并且您的代码被转换为类似undefined[i]
的内容,这会触发错误。您必须首先将uploader
声明为数组:
var uploader = [];
因为您声明变量时没有定义它,所以它的默认值为undefined
,并且您的代码被翻译成类似于undefined[i]
的内容,这会触发错误。必须类似于
var uploader = {};
或者uploader为空,您无法为其分配任何内容
编辑:
在我看来,有两种观点,如果一个人想要拥有一个数组,那么声明一个数组是有意义的,var uploader=[]然后使用uploader.push()
方法或将其定义为对象var uploader={}只需执行上传程序[i]=…
也可以使用数组执行后一种操作,但在后一种情况下,我认为没有必要维护计数器(I
)
var uploader = {};
或者uploader为空,您无法为其分配任何内容
编辑:
在我看来,有两种观点,如果一个人想要拥有一个数组,那么声明一个数组是有意义的,var uploader=[]然后使用uploader.push()
方法或将其定义为对象var uploader={}只需执行上传程序[i]=…
也可以使用数组执行后一种操作,但在后一种情况下,我认为没有必要维护计数器(I
)代码>这样以后就不需要重新包装它了<代码>$e.sibbins('input').val(responseJSON.newfilename)代码>也$(此)[0]
是冗余的。只需使用element:this,
还可以删除i++
只需将uploader[++i]=new qq.FileUploader({
…划掉它..你可以将$(“.fileupload”).each(function(){
改为$(“.fileupload”).each(function(i){
,省去变量i并一起递增。$e=$(this);
,这样你以后就不需要重新包装它了。$e('input').val(responseJSON.newfilename);
也$(这个)[0]
是多余的。只要使用元素:这个,
你也可以删除i++;
然后把uploader[+++i]=新的qq.FileUploader({
…划掉它..你可以更改$(.fileupload”)(函数(i){
并将变量i和increment一起省略。我觉得以这种方式为数组赋值是一个奇怪的想法,我宁愿使用uploader.push()就像你使用数组一样???:p你的确切意思是什么,@rlemon?你提倡使用Array.push;但是你的答案将变量指定为一个对象。@rlemon,因为这两个选项都是有效的。要么[]和uploader.push(),要么{}和uploader。[i]=..我觉得以这种方式给数组赋值是一个奇怪的想法,我宁愿使用uploader.push(),就像使用数组一样???:你的确切意思是什么,@rlemon?你主张使用array.push;但是你的答案将变量赋值为对象。@rlemon,因为这两个选项都是有效的。要么[]和uploader.push(),要么{}还有uploader。[i]=…..我没有投反对票,因为这个答案并不是真的错,但OP更可能需要一个真正的数组,而不仅仅是一个对象,因为索引是数字的。因此,var uploader=[];
可能是一个更好的答案。@Pointy我同意,但接下来是array.push()正如我上面已经指出的那样,听起来更适合我。TypeError:Object#没有方法“push”
@rlemon,这正是我的观点,如果你将某个东西声明为数组,那么使用特定于数组的函数(如push())是有意义的。如果你只想做某件事[I]='whatever',只要有一个对象就可以了。@qn很好,除了数组将自动维护.length
属性,而不管属性如何(使用数字“名称”)我没有投反对票,因为这个答案并不是真的错,但OP更可能想要一个真正的数组,而不仅仅是一个对象,因为索引是数字的。因此,var uploader=[];
可能是一个更好的答案。@Pointy我同意,但接下来是array.push()正如我上面已经指出的那样,听起来更适合我。TypeError:Object#没有方法“push”
@rlemon,这正是我的观点,如果你将某个东西声明为数组,那么使用特定于数组的函数(如push())是有意义的。如果你只想做某件事[I]='whatever',只要有一个对象就可以了。@qn很好,除了数组将自动维护.length
属性,而不管如何添加属性(带有数字“名称”)。