Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除对象时布尔值数组是否未定义?_Javascript_Jquery Ui Droppable - Fatal编程技术网

Javascript 删除对象时布尔值数组是否未定义?

Javascript 删除对象时布尔值数组是否未定义?,javascript,jquery-ui-droppable,Javascript,Jquery Ui Droppable,我有一些拖放对象的数组,这里: 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","#

我有一些拖放对象的数组,这里:

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]);
            }
        });
    }

for(var j=0;j问题是变量j在调用函数时无效。您已经运行了循环,并且j无效,它已经增加到数组的末尾。

这是因为在

alert(elmBool[j]);
…运行时,
j
现在超出了数组的范围(它将等于
elmDragObj.length

最简单的解决方案是简单地使用
$。each()

如果您真的想为
循环使用
,可以这样做,但您需要在闭包中“锁定”
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]);
            };
        })()
    });
}

for(var j=0;ja在
drop
处理程序触发时,它将尝试使用
j
在for()结尾处结束的值循环,而不是定义drop时的值。例如,您没有在循环的某个特定点嵌入j。elmBool是在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]);
            };
        })()
    });
}