Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

How do I assign a function to a DropDownList onChange in ScriptUI?

Contributor ,
Dec 04, 2019 Dec 04, 2019

I'm pretty new to javascript and Script UI and need a little help joining a couple things I've learned together.

 

I'm trying to make a drop down list where the default value (Item 1) is not attached to a function (so it can be used as a title for the dropdown), but selecting a different item from the dropdown executes a function. Basic example here. This doesn't work BTW…

 

 

{
   function myScript(thisObj) {
      function myScript_buildUI(thisObj) {
                var myPanel = (thisObj instanceof Panel) ? thisObj : new Window("palette", "Panel Name", [0, 0, 300, 300]);

                res = "group{orientation:'column', alignment:['fill', 'fill'], alignChildren:['fill', 'fill'],\
                        myDropDownList: DropDownList{properties:{items:['Item 1', 'Item 2', 'Item 3', 'Item 4']}},\
                }"

                // Adds resource string to panel
                myPanel.grp = myPanel.add(res);

                // DropDownList default selection
                myPanel.grp.myDropDownList.selection = 0; /// Dropdown index starts at 0
                
                // Assign function to UI elements
                  if (myPanel.grp.myDropDownList.value == 1) function() {
			         alert ("ALERT 1")
                  }

                  else if (myPanel.grp.myDropDownList.value == 2) function() {
			         alert ("ALERT 2")
                  }

                  else if (myPanel.grp.myDropDownList.value == 3) function() {
			         alert ("ALERT 3")
                  }

                // Setup panel sizing and make panel resizable
                myPanel.layout.layout(true);
                myPanel.grp.minimumSize = myPanel.grp.size;
                myPanel.layout.resize();
                myPanel.onResizing = myPanel.onResize = function () {this.layout.resize();}

                return myPanel;
      }

      // Build script panel
      var myScriptPal = myScript_buildUI(thisObj);

      if ((myScriptPal != null) && (myScriptPal instanceof Window)) {
          myScriptPal.center();
          myScriptPal.show();
       }
   }

   // Execute script
   myScript(this);
}

 

 

 

I have tested the alert function with a simple button, so I know it works here…

 

 

        myPanel.grp.group2.alertTest.onClick = function() {
			alert ("ALERT 1")
        }

 

 

 

I think I basically need to say "if the value is equal to 1 then execute this function" but I'm unsure how to add that to the following line… (also I assume I need to add onChange and not onClick)

 

 

 

if (myPanel.grp.myDropDownList.value == 1)

 

 

 

 

TOPICS
Scripting , User interface or workspaces
2.9K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Contributor , Dec 04, 2019 Dec 04, 2019

Inside of the onChange = function() {}, you could simply do a switch statement for each of the dropdown values!

switch(myPanel.grp.myDropDownList.selection.index) {
    case 0:
        functionOne();
    break;
    case 1:
        functionTwo();
    break;
    case 2:
        functionThree();
    break;
    case 3:
        functionFour();
    break;
}

 Now you can have a case for as many dropdown values as you want! Each one can do something totally different, or similar to others!

Translate
Contributor ,
Dec 04, 2019 Dec 04, 2019

Just have to use it like this:

 

 

myPanel.grp.myDropDownList.onChange = function() {
    alert("ALERT 1");
}

 

 

If you want to check if the dropdown has changed, you need a variable to keep track of the index every time they change it. Then you can easily compare the tracking variable to the current selection.

var tracker = myPanel.grp.myDropDownList.selection.index;

myPanel.grp.myDropDownList.onChange = function() {
    if(tracker != myPanel.grp.myDropDownList.selection.index) {
         alert("YOU SELECTED A DIFFERENT DROPDOWN SELECTION");
}
    tracker = myPanel.grp.myDropDownList.selection.index;

}

 

Also side note, don't forget your semicolons (;). Forgetting lots of little things in javascript can add up to lots of later frustration.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 04, 2019 Dec 04, 2019

Thanks! Very helpful. I added that code to my script and I see the alert each time I change it. However, what I'd like to do is trigger a unique alert for each item number (in truth, actually different commands but for simplicities sake here, separate alerts will suffice). How would I modify your code for that?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 04, 2019 Dec 04, 2019

Inside of the onChange = function() {}, you could simply do a switch statement for each of the dropdown values!

switch(myPanel.grp.myDropDownList.selection.index) {
    case 0:
        functionOne();
    break;
    case 1:
        functionTwo();
    break;
    case 2:
        functionThree();
    break;
    case 3:
        functionFour();
    break;
}

 Now you can have a case for as many dropdown values as you want! Each one can do something totally different, or similar to others!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Contributor ,
Dec 04, 2019 Dec 04, 2019
LATEST

Thanks so much!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines