传递给函数的值变得不确定[重复]

问题描述 投票:0回答:1

我正在尝试编写脚本来禁用photoshop中的图层。到目前为止,第一部分(第一个功能)已经工作了,它只是抓住了所有红色层并将它们放入一个数组中。然后,我调用第二个函数,该函数从数组中一个个取一个名称,并将其传递给禁用器(showBounds函数)。但是,我正在查看showBounds收到的输入(“名称”),突然它开始显示它正在“未定义”。怎么会这样?发生什么事?

var doc = app.activeDocument;
var theLayers = [];

function fillLayerArray(){
    // get number of layers;
    var ref = new ActionReference();
    ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
    var applicationDesc = executeActionGet(ref);
    var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));

    // process the layers;

    //var theOthers = new Array;
    for (var m = 0; m <= theNumber; m++) {


                var ref = new ActionReference();
                ref.putIndex( charIDToTypeID( "Lyr " ), m);
                var layerDesc = executeActionGet(ref);
                var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
                var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
                var theName = layerDesc.getString(stringIDToTypeID('name'));
                var theColor = layerDesc.getEnumerationValue(stringIDToTypeID("color"));
                globColor = theColor;
                    if (typeIDToStringID(theColor) == "red" && layerSet != "layerSectionEnd" ) {
                        theLayers.push(theName);
                    }

    };
    hideLayers(theNumber);
    //showBounds(doc.layerSets);

}


function hideLayers(theNumber){
    for (var i = 0; i <= theLayers.length; i++) {
        //app.activeDocument.activeLayer.visible = false;   
        currentLayerName = theLayers[i];

         //alert(currentLayerName)

        alert(currentLayerName);
        showBounds(doc.layerSets, currentLayerName);




    }
}


function showBounds(layerNode, name) {    
    for (var i=0; i<layerNode.length; i++) {

        showBounds(layerNode[i].layerSets);

        for(var layerIndex=0; layerIndex < layerNode[i].artLayers.length; layerIndex++) {
            var layer=layerNode[i].artLayers[layerIndex];
            alert(layer.name + name)

            try{

                if (layer.name == name) {
                    layer.visible = 0;
                }
            }catch(e){
            }
        }
    }
}


fillLayerArray();
javascript photoshop
1个回答
0
投票

您有

i <= theLayers.length

应该是

i < theLayers.length

在hideLayers中。

(也在m <= theNumber中。记住数组在JS中从零开始索引)

© www.soinside.com 2019 - 2024. All rights reserved.