我有一些拖动对象和被删除对象的数组,在这里:
var elmDragObj = ["#ob01","#ob02","#ob03","#ob04","#ob05","#ob06","#ob07","#ob08","#ob09","#ob10","#ob11","#ob12","#ob13","#ob14","#ob15","#ob16","#ob17","#ob18","#ob19","#ob20"];
var elmDropObj = ["#va_kb_a","#va_ks_a","#va_kk_a","#dk_kb_a","#dk_kb_b","#dk_ks_a","#pr_kb_a","#rv_kb_a","#rv_kb_b","#rv_kb_c","#pr_ks_a","#rv_ks_a","#rv_ks_b","#rv_ks_c","#vl_kb_a","#vl_ks_a","#vl_kk_a","#vk_kb_a","#vk_ks_a","#vk_kk_a"];
我有一系列布尔值来检查所有对象何时被放置到位,在这里:
var elmBool = [false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false];
当我想检查布尔值时,它是未定义的,下面是脚本:
for(var j=0; j<elmDragObj.length; j++){
$(elmDragObj[j]).draggable({revert:"invalid"});
$(elmDropObj[j]).droppable({
accept: elmDragObj[j],
drop: function( event, ui ) {
alert(elmBool[j]);
}
});
}
我做错了吗?
答案 0 :(得分:2)
这是因为当时......
alert(elmBool[j]);
...运行,j
现在超出了数组的范围(它将等于elmDragObj.length
)。
最简单的解决方案是简单地使用$.each()
:
$.each(elmDragObj, function(j, sel) {
$(sel).draggable({ revert: 'invalid' });
$(elmDropObj[j]).droppable({
accept: sel,
drop: function(event, ui) {
alert(elmBool[j]);
}
});
});
如果您真的想使用for
循环,可以完成,但您需要在闭包中“锁定”j
的值:
for(var j=0; j<elmDragObj.length; j++){
$(elmDragObj[j]).draggable({revert:"invalid"});
$(elmDropObj[j]).droppable({
accept: elmDragObj[j],
drop: (function() {
var index = j;
return function(event, ui) {
alert(elmBool[index]);
};
})()
});
}
显然,这不像第一种方法那样开发人员友好,所以我的建议绝对是$.each()
。
答案 1 :(得分:0)
问题是变量j在调用函数时无效。您已经运行了循环并且j无效,它已经超过了数组的末尾。