javascript - 传递给函数的值变得未定义
问题描述
我正在尝试编写一个脚本来禁用 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();
解决方案
你有
i <= theLayers.length
应该
i < theLayers.length
在隐藏层中。
(同样在 m <= theNumber ....记住数组在 JS 中从零开始索引)