取消选中多个复选框AS3

时间:2014-08-05 23:29:50

标签: actionscript-3 checkbox

我在一个名为cbHolder的舞台上有一个占位符movieclip,一些代码创建了一系列复选框,总共33个,分配了一个' ON CHANGE'每个事件的事件监听器然后将它们添加到cbHolder MC中。事件监听器触发函数iChanged,如下所示:

var cbSearchArray:Array = new Array();
function iChanged(event:Event):void{
if (event.target.selected == true){
        trace(event.target.name + " is checked");
        cbSearchArray.push(event.target.name);
        trace("array is:" + cbSearchArray);
        }
        else{
            trace(event.target.name + " is unchecked");
            cbSearchArray.splice(cbSearchArray.indexOf(event.target.name), 1);
            trace("array is:" + cbSearchArray);
            }
    }

这一切都很棒,添加和删除数组元素就像一个拥有的东西,我真的很高兴。我不知道我有它...但是我现在真正坚持的是一种有效的方法来取消选中所有复选框,或通过按钮检查所有的方框。当我尝试使用for循环遍历数组并尝试使用

设置复选框时
cbSearchArray[i].selected = false;

我收到错误:无法在String上创建选中的属性。我不明白为什么Flash没有将它们视为对象名称.. !!如果我试试

cbHolder.cbSearchArray[i].selected = false;

我收到错误:术语未定义且没有属性。

我完全失去了,经过一整天的晃眼,我没有遇到任何有用的事情。希望有人能指出我正确的方向,我会在这里张贴并寻求帮助。

1 个答案:

答案 0 :(得分:0)

您可以拥有一个包含对象引用的数组,而不是具有对象名称的数组。每次创建一个复选框时,将其添加到复选框数组中,否则它将尝试修改字符串上的.selected属性,这将合理地抛出您正在获得的错误。

以下是您可以做的事情:

var cbArray:Array = new Array();

function createCheck():void{
    var cb:CheckBox = new CheckBox();
    cbArray.push(cb);
}

然后你可以在迭代它时引用cbArray [i] .selected。

如果您愿意,另一种方法是使用getChildByName方法获取复选框。

var cb:CheckBox = cbHolder.getChildByName(cbSearchArray[i]) as CheckBox;
cb.selected = false;

但是我强烈建议不要采用这种方法,因为使用命名可以解决许多潜在的问题。我建议您只使用参考。