0

I am not sure if I am wording this correctly. I have a dropdown menu, that when an option is selected, the second dropdown pops in and has options for the selected value. This all works great, but now I am trying to give a button to add more dropdowns in JavaScript. The first works, but I cannot get the second value to show.

HTML code:

<table class="table-container">
     <tbody><tr><td>
        <select class="custom-select" id="mediaSel" name="mediaSel" onchange="dropDownSelect(this.id, 'mediaSel2')">
        <option value="">--Select--</option>
        <option value="Illustration" name="Illustration">Illustration</option>
        <option value="GraphicDesign" name="GraphicDesign">Graphic Design</option>
        <option value="MotionGraphics" name="MotionGraphics">Motion Graphics</option>
        <option value="WebDesign" name="WebDesign">Web Design</option>
        </select>
             </td><td>
        <select class="custom-select" id="mediaSel2" name="mediaSel2"></select>
             </td><td class="buttonRow">
        <div id="addRow" class="addButton" onclick="addSelection()"><span class="plus"></span></div>
    </td></tr></tbody>
 </table>

So from here I was able to add the second dropdown when the onchange event has been fired.

JS code:

function dropDownSelect(s1,s2) {
    var s1 = document.getElementById(s1);
    var s2 = document.getElementById(s2);
    var hideSel = document.getElementById("mediaSel2");
    s2.innerHTML = "";

    if(s1.value == "Illustration") {
       var optionArray = ["Select|--select--","ChildrensBooks|Childrens Book Design","FanArt|Fan Art","WallArt|Wall Art"];
    }
     else if(s1.value == "GraphicDesign") {
       var optionArray = ["Select|--select--","Logo|Logo","BusinessCards|Business Cards","Flyers|Flyers","Billboards|Billboards","MagazineAds|Magazine Ads","CatalogeDesign|Cataloge Design","NewsPaperAds|Newspaper Ads"];
    }
    else if(s1.value == "MotionGraphics") {
       var optionArray = ["Select|--select--","LogoAnimation|Logo Animation","Explainers|Explainer Videos","ShortFilms|Short Film Animation","CharacterDesign|Character Design","ProductDesign|Product Design","Animation|Animation"];
    }
    else if(s1.value == "WebDesign") {
       var optionArray = ["Websites|Websites"];
    }

    if(s1.value == "GraphicDesign" || s1.value == "Illustration" || s1.value == "MotionGraphics" || s1.value == "WebDesign") {
      s2.style.display="inline-block";
    } else {
      s2.style.display="none"; 
    }

    for(var option in optionArray) {
        var pair = optionArray[option].split("|");
        var newOption = document.createElement("option");
        newOption.value = pair[0];
        newOption.innerHTML = pair[1];
        s2.options.add(newOption);
    }
}

Like I said this all works great. but the final step is where I am struggling. I have the addButton in HTM that when clicked runs the next js code and gives me the dropdown.

I can't seem to figure out how to attach the function dropDownSelect from above.

addButton JS:

function addSelection() {
    var html = '<tr><td><select class="custom-select addClick" id="mediaSel" name="mediaSel" onchange="dropDownSelect2(this.id, "mediaSel2")"><option value="">--Select--</option><option value="Illustration" name="Illustration">Illustration</option><option value="GraphicDesign" name="GraphicDesign">Graphic Design</option><option value="MotionGraphics" name="MotionGraphics">Motion Graphics</option><option value="WebDesign" name="WebDesign">Web Design</option></select></td><td><select class="custom-select" id="mediaSel2" name="mediaSel2"></select></td><td class="buttonRow"><div id="removeRow" class="removeButton" onclick="removeSelection()"><span class="minus"></span></div></td></tr>';

    $('tbody').append(html);
}

any thoughts?

1 Answer 1

1

You need to escape the inner pair of double quotes around the parameter of the function call:

var html = '... onchange="dropDownSelect2(this.id, \"mediaSel2\")"><option ...`;
Sign up to request clarification or add additional context in comments.

1 Comment

that is correct I feel stupid now! next question that relates to this. I get the dropdown to show now but when I pick from the first dropdown of the second set it removes the option from the first select of the second option. something to do with a counter?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.