首页 > 解决方案 > 传递给函数的值变得未定义

问题描述

我正在尝试编写一个脚本来禁用 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();

标签: javascriptphotoshop

解决方案


你有

i <= theLayers.length

应该

i < theLayers.length

在隐藏层中。

(同样在 m <= theNumber ....记住数组在 JS 中从零开始索引)


推荐阅读