Creative Communities of the World Forums

The peer to peer support community for media production professionals.

Activity Forums Adobe After Effects Expressions Is there any idea why this gave undefined error?

  • Is there any idea why this gave undefined error?

    Posted by Palak Bhatt on July 29, 2020 at 8:08 pm

    Check below code, Please let me know why this code give error “undefined”

    var myLayers = app.project.activeItem.selectedLayers;
    if (myLayers.length > 0){
    for (var i=0; i <= thisComp.selectedLayers.length; i++){
    var d = myLayers[i].index;
    alert(myLayers[i].index);
    }

    app.project.activeItem.layer(d).moveAfter(app.project.activeItem.layer(d+10));
    }else{
    alert ("No layers selected.");
    }

    Filip Vandueren replied 6 years ago 2 Members · 6 Replies
  • 6 Replies
  • Filip Vandueren

    July 29, 2020 at 8:55 pm

    In the for loop, use < not <=

  • Palak Bhatt

    July 29, 2020 at 9:16 pm

    Thanks ☺ Brothers i have no words for you.

    I have the other question
    I am trying to move all selected layers at every Nth number.

    What should i do this code to works?

    var d = 0;
    var myLayers = app.project.activeItem.selectedLayers;
    var myMove = app.project.activeItem;

    if (myLayers.length > 0){
    for (var i=0; i &lt; myLayers.length; i++){
    d = myLayers[i].index;
    }
    myMove.layer(d).moveAfter(myMove.layer(d+10));

    }else{
    alert ("No layers selected.");
    }

  • Palak Bhatt

    July 29, 2020 at 9:24 pm

    The problem is on above code is only moved last number of selected layer, How can I move bulk layers at once? at fixed number of layers

  • Palak Bhatt

    July 29, 2020 at 9:37 pm

    I Got it ☺

    Check it below
    Thank you, Brother

    I want to add you on Facebook if you don’t mind
    give me your id if possible, You are super pro :)))
    many thanks

    ver NumberOfMove = 10;
    var myLayers = app.project.activeItem.selectedLayers;
    var myMove = app.project.activeItem;

    if (myLayers.length > 0){
    for (var i=0; i &lt; myLayers.length; i++){
    var d = myLayers[i].index;
    myMove.layer(d).moveAfter(myMove.layer(d+NumberOfMove));
    }

    }else{
    alert ("No layers selected.");
    }

  • Palak Bhatt

    July 29, 2020 at 9:49 pm

    Corrected and tested
    Now its final

    var d = 0;
    var NumberOfMove = 2;
    var myLayers = app.project.activeItem.selectedLayers;
    var myMove = app.project.activeItem;

    if (myLayers.length > 0){
    for (var i=0; i &lt; myLayers.length; i++){
    d = myLayers[i].index;

    myMove.layer(d).moveAfter(myMove.layer(d+NumberOfMove+myLayers.length));
    }

    }else{
    alert ("No layers selected.");
    }

  • Filip Vandueren

    July 30, 2020 at 11:46 am

    I don’t really understand how you want the layers to move with this code, It seems very unpredictable.

    If you want the layers to move down by “numberOfMove”, it’s best to cycle through them backwards, because moving a layer will change the indexes of all the layers after it.
    So we first order the selectedLayers by index descending (they are in the list in the order that they were clicked on, not in the order of index)

    I’ve changed the code a bit so it also works for negative numbers.


    var numberOfMove = 2;
    var myComp = app.project.activeItem;
    var myLayers = myComp.selectedLayers;

    myLayers.sort( function(a,b) { return b.index - a.index }); // reverse sort layers by index
    if (numberOfMove < 0) myLayers.reverse(); // except if we're moving backwards, then we do want sorted by index ascending

    if (myLayers.length > 0){
    for (var i=0; i< myLayers.length; i++){
    d = Math.min ( d , myComp.numLayers-i); // never move than the number of layers
    if (myLayers[i].index!==d) { // can't move a layer after itself
    myLayers[i].moveAfter(myComp.layer(d));
    }
    } else {
    d= Math.max (d, 1+i); // never less than 1st layer
    if (myLayers[i].index!==d) { // can't move a layer before itself
    myLayers[i].moveBefore(myComp.layer(d));
    }
    }
    }

    }else{
    alert ("No layers selected.");
    }

We use anonymous cookies to give you the best experience we can.
Our Privacy policy | GDPR Policy