Skip to main content
February 22, 2017
Question

How can I judge that no layer/layerset is selected

  • February 22, 2017
  • 1 reply
  • 1104 views

Hello Masters:

Javascript select the first layer or layerset as default even I did not selected any layer or layerset. So, a trouble appeared, How can I judge that no layer/layerset is selected in Javascript.

I have try this "if" Sentence:

if(app.activedocument.activelayer.typename=="LaySet") {

....................

But

If I select none layerset in the PSD file, the JS select the first layerset of layer as default. but it was not I wanted!

who can give me a new method to judge none layerset was selected in the PSD file by Javascript.

Tanks a lot.

This topic has been closed for replies.

1 reply

c.pfaffenbichler
Community Expert
Community Expert
February 22, 2017

var aaa = GetSelectedLayers();

alert (aaa);

//////

function GetSelectedLayers() {

var A=[];

    var desc11 = new ActionDescriptor();

        var ref9 = new ActionReference();

        ref9.putClass( stringIDToTypeID('layerSection') );

    desc11.putReference( charIDToTypeID('null'), ref9 );

        var ref10 = new ActionReference();

        ref10.putEnumerated( charIDToTypeID('Lyr '), charIDToTypeID('Ordn'), charIDToTypeID('Trgt') );

    desc11.putReference( charIDToTypeID('From'), ref10 );

    executeAction( charIDToTypeID('Mk  '), desc11, DialogModes.NO );

var gL = activeDocument.activeLayer.layers;

for(var i=0;i<gL.length;i++){

A.push(gL);

}

executeAction( charIDToTypeID('undo'), undefined, DialogModes.NO );

return A;

};

Edit: I think that function is from a Script by Paul Riggott.

SuperMerlin
Inspiring
February 22, 2017

That will only work with newer version of Photoshop, all versions upto CS6 need an extra check, else the top layer will always be returned.

function getSelectedLayersIdx(){

      var selectedLayers = new Array();

      var backGroundCounter = 1;

            if(activeDocument.artLayers.length > 0){

            backGroundCounter = activeDocument.artLayers[activeDocument.artLayers.length - 1].isBackgroundLayer ? 0 : 1;

            }

      var ref = new ActionReference();

      ref.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("targetLayers"));

      ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );

      var desc = executeActionGet(ref);

      if( desc.hasKey( stringIDToTypeID( "targetLayers" ) ) ){

         desc = desc.getList( stringIDToTypeID( "targetLayers" ));

          var c = desc.count;

          var selectedLayers = new Array();

          for(var i=0;i<c;i++){

               selectedLayers.push(  desc.getReference( i ).getIndex() +backGroundCounter );

          }

      if(app.version.match(/^\d+/) > 15) return selectedLayers ;

       }else{

           if(app.version.match(/^\d+/) > 15) return selectedLayers ;

         var ref = new ActionReference();

         ref.putProperty( charIDToTypeID("Prpr") , charIDToTypeID( "ItmI" ));

         ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );

         if(!backGroundCounter){

            selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )) -1);

            }else{

                selectedLayers.push( executeActionGet(ref).getInteger(charIDToTypeID( "ItmI" )));

                }

     var vis = app.activeDocument.activeLayer.visible;

        if(vis == true) app.activeDocument.activeLayer.visible = false;

        var desc9 = new ActionDescriptor();

    var list9 = new ActionList();

    var ref9 = new ActionReference();

    ref9.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );

    list9.putReference( ref9 );

    desc9.putList( charIDToTypeID("null"), list9 );

    executeAction( charIDToTypeID("Shw "), desc9, DialogModes.NO );

    if(app.activeDocument.activeLayer.visible == false) selectedLayers.shift();

        app.activeDocument.activeLayer.visible = vis;

      }

      return selectedLayers;

};

February 22, 2017

Amazing!

I'm very lucky to get a favor from the fellow of ADOBE forums.

Especially, SuperMerlin!

Thanks!

and  let me have a try, apply you code on my Engineer.