0

I wrote an array with parameters I need to use in two select boxes based on option from my first select box.

The first select box is to choose country you are from and the two others are based on the first one and need to be edited using the data from my array. Example: You choose country (Germany) and it edits delivery options and payment options based on my array.

Array:

var transportData = {
    cs : {countryName: "Czech Republic", transportData: {methods: [personal => {"Osobní převzetí", 0}, package => {"Doporučený dopis", 0}, ems => {"EMS", 125}]}, paymentMethod: ["Dobírkou", "Převodem", "Hotově"]},
    sk : {countryName: "Slovakia", transportData: {methods: [tnt => {"TNT", 125}]}, paymentMethod: ["Dobírkou", "Převodem"]},
    de : {countryName: "Germany", transportData: {methods: [tnt => {"TNT", 225}]}, paymentMethod: ["Dobírkou", "Převodem"]},
}

Czech Republic options should look like this:

Payment Method: Dobírkou, Převodem, Hotově
Transport Method: Osobní převzetí, Doporučený dopis, EMS

How would you read from this array and implement the data into two select boxes?

php file with forms:

<h5>Dodací údaje</h5>
<hr></hr>

<div class="form-group order-form mb-3">
    <label for="zakaznikDeliveryJmeno"><?=$lang['ORD_COMPNAME'];?></label>
    <input type="text" class="form-control" id="zakaznikDeliveryJmeno" name="delivery_customer" placeholder="<?=$lang['ORD_COMPNAME'];?>">
</div>

<div class="form-group order-form mb-3">
    <label for="zakaznikCountryImportant">Stát</label>
    <select class="form-control" id="zakaznikCountryImportant" name="countryImportant">
        <option value="cs">Czech Republic</option>
        <option value="sk">Slovakia</option>
        <option value="de">Germany</option>
    </select>
</div>                          
    
<div class="form-group order-form mb-3">
    <label for="zakaznikDeliveryUlice"><?=$lang['ORD_STREET'];?></label>
    <input type="text" class="form-control" id="zakaznikDeliveryUlice" name="delivery_street" placeholder="<?=$lang['ORD_STREET'];?>">
</div>
    
<div class="form-group order-form mb-3">
    <label for="zakaznikDeliveryMesto"><?=$lang['ORD_CITY'];?></label>
    <input type="text" class="form-control" id="zakaznikDeliveryMesto" name="delivery_city" placeholder="<?=$lang['ORD_CITY'];?>">
</div>
    
<div class="form-group order-form mb-3">
    <label for="zakaznikDeliveryPSC"><?=$lang['ORD_ZIP'];?></label>
    <input type="text" class="form-control" id="zakaznikDeliveryPSC" name="delivery_zip" placeholder="<?=$lang['ORD_ZIP'];?>">
</div>

<hr></hr>
<h5>Přeprava</h5>
<hr></hr>

<div class="form-group order-form mb-3">
    <label for="zpusobPreprava"><?=$lang['ORD_TRANSPORT'];?></label>
    <select class="form-control" id="zpusobPreprava" name="transport">
        <option value="personalTakeover"><?=$lang['ORD_T_OPTION_1'];?></option>
        <option value="attn"><?=$lang['ORD_T_OPTION_2'];?></option>
        <option value="ems"><?=$lang['ORD_T_OPTION_3'];?></option>
    </select>
</div>
    <div class="form-group order-form mb-3">
    <label for="zpusobPlatba"><?=$lang['ORD_PAYMENT'];?></label>
    <select class="form-control" id="zpusobPlatba" name="payment">
        <option value="transfer"><?=$lang['ORD_P_OPTION_1'];?></option>
        <option value="cash"><?=$lang['ORD_P_OPTION_2'];?></option>
        <option value="cashOnDelivery"><?=$lang['ORD_P_OPTION_3'];?></option>
    </select>
</div>

I have tried the following:

var transportData = {
    cs : {countryName: "Czech Republic", transportData: {methods: [personal => {"Osobní převzetí", 0}, package => {"Doporučený dopis", 0}, ems => {"EMS", 125}]}, paymentMethod: ["Dobírkou", "Převodem", "Hotově"]},
    sk : {countryName: "Slovakia", transportData: {methods: [tnt => {"TNT", 125}]}, paymentMethod: ["Dobírkou", "Převodem"]},
    de : {countryName: "Germany", transportData: {methods: [tnt => {"TNT", 225}]}, paymentMethod: ["Dobírkou", "Převodem"]},
}
transportData.forEach(getCountryData);

function getCountryData(item, index) {
    document.getElementById("country").innerHTML += index + ":" + item + "<br>";
}

It outputs Uncaught TypeError: transportData.forEach is not a function at transport.js:6

  • 5
    Show us what you have tried. SO isn't a free code writing service. The objective here is for you to post your attempts to solve your own issue and others help when they don't work as expected. See [ask] and [mcve] – charlietfl Mar 20 '21 at 13:12
  • Also this is a JS question so please post RENDERED HTML instead of PHP – mplungjan Mar 20 '21 at 14:11
  • You can't `.forEach()` over an object. https://stackoverflow.com/questions/8312459/iterate-through-object-properties – kmoser Mar 29 '21 at 03:18

0 Answers0