Связывание данных JavaScript в объекте с элементами HTML

У меня есть упражнение на JavaScript, в котором я пытаюсь создать таблицу с данными после нажатия определенной ссылки. На самом деле это упражнение из трех частей. 2 части завершены. Единственная часть, которую я не могу сделать, - это часть стола. Это раскрывающееся меню выбора, в котором пользователь выбирает категорию. После выбора категории появляется бизнес из этой категории. Каждый бизнес - это тег li и якорная ссылка. Предполагается, что после нажатия на бизнес-ссылку происходит переход на страницу и отображение таблицы с информацией об этой конкретной компании. Моя проблема - отображение таблицы с данными. Может ли кто-нибудь помочь мне, не меняя код, который у меня уже есть.

var businessListings = {
    hair: {
      "Tina's Hair Salon": {
        Address: "1520 Lakeview Drive Chester, Pa 19013",
        PhoneNumber: "610-872-1109",
        Website: "www.tinahair.com",
        Specialty: "All hair types"
      }, // line ends Tina Hair Salon info
      "Dollhouse Hair Studio": {
        Address: "485 4th Street Chester, Pa 19013",
        PhoneNumber: "484-419-8595",
        Website: "www.dhhairstudio.com",
        Specialty: "Braiding, All hair types"
      } // line ends dollhouse info
    }, // line ends hair category
    healBeauty: {
      Myra 's Make-Up Kit": {
      Address: "4260 Jeffrey Lane Chester, Pa 19013",
      PhoneNumber: "610-848-2014",
      Website: "www.mymakeupkit.com",
      Specialty: "Make all skin tones, ages, events"
    }, // line ends Myra's makeup info
    "Purity Spa": {
      Address: "213 W. 24th Street Chester, Pa 19013",
      PhoneNumber: "267-608-4752",
      Website: "www.purityspa.com",
      Specialty: "Universal"
    } // line ends Purity spa info
  }, // line ends healBeauty category
  food: {
    "Larry's Pies": {
      Address: "250 3rd Street Chester, Pa 19013",
      PhoneNumber: "610-724-2008",
      Website: "N/A",
      Specialty: "Pies, Desserts"
    }, // line ends Larry's Pies info
    "C-Pride Super Market": {
      Address: "3018 W. 7th Street Chester, Pa 19013",
      PhoneNumber: "610-803-2020",
      Website: "www.cpridemarket.com",
      Specialty: "All Foods, Groceries"
    } // line ends C-Pride Market info
  }, // line ends food category
  travel: {
    "G&W Travel Agency": {
      Address: "200 Avenue of States Chester, Pa 19013",
      PhoneNumber: "484-203-8587",
      Website: "www.gandwtravel.com",
      Specialty: "Traveling, All Occasions"
    }, // line ends G&W Travel info
    "Grant Travel Agency": {
      Address: "1834 Edward Street Chester, Pa 19013",
      PhoneNumber: "267-515-7062",
      Website: "N/A",
      Specialty: "Traveling, All Occasions"
    } // line ends Grant Travel info
  }, // line ends travel category
  fitness: {
    "Elijah's Supreme Gym": {
      Address: "420 Tilghman Street Chester, Pa 19013",
      PhoneNumber: "610-898-5040",
      Website: "www.esupremegym.com",
      Specialty: "Fitness, All Body Types"
    }, // line ends Elijah's Gym info
    "Fitness Girl Gym": {
      Address: "2790 E. 15th Street Chester, Pa 19013",
      PhoneNumber: "267-762-8240",
      Website: "www.esupremegym.com",
      Specialty: "Fitness, All Body Types"
    } // line ends Fitness Gym info
  },
  retCloth: {
    "Enid and 4 Girls Boutique": {
      Address: "2200 Edgmont Avenue Chester, Pa 19013",
      PhoneNumber: "610-203-8570",
      Website: "www.enidand4girls.com",
      Specialty: "Clothing, Accessories"
    }, // line ends Enid and 4 Girls info
    "Fatima & Iman's Closet": {
      Address: "824 Parker Street Chester, Pa 19013",
      PhoneNumber: "610-800-1937",
      Website: "www.fatimaandiman.com",
      Specialty: "Clothing, Accessories"
    } // line ends Enid and 4 Girls info
  }, // line ends retCloth info
  auto: {
    "Arthur's": {
      Address: "1019 Edgmont Avenue Chester, Pa 19013",
      PhoneNumber: "484-626-1149",
      Website: "N/A",
      Specialty: "All Vehicle Issues"
    }, // line ends Arthur's info
    "Johnson and Son Mechanics": {
      Address: "517 Pennell Street Chester, Pa 19013",
      PhoneNumber: "610-504-8127",
      Website: "www.johnsonandsons.com",
      Specialty: "Auto Body Work"
    } // line ends Johnson and Sons info
  }, // line ends auto info
  homeDec: {
    "Charisma Home Decor": {
      Address: "7790 Melrose Avenue Chester, Pa 19013",
      PhoneNumber: "610-203-9045",
      Website: "www.charismahomedecor.com",
      Specialty: "Handcrafted Home Decor, Elegant Home Decor, All Styles"
    }, // line ends Charisma Home Decor info
    "Lily's Home Decor": {
      Address: "1402 Ward Road Chester, Pa 19013",
      PhoneNumber: "267-761-2990",
      Website: "www.lilydesign.com",
      Specialty: "All Styles"
    } // line ends Lily Home Decor info
  }, // line ends homeDec info
  photo: {
    "Marple Photography": {
      Address: "618 Taylor Avenue Chester, Pa 19013",
      PhoneNumber: "610-499-8615",
      Website: "www.marplephotography.com",
      Specialty: "All Styles, Occasions"
    }, // line ends Marple Photography info
    "Kyle's Photography": {
      Address: "216 W. 9th Street Chester, Pa 19013",
      PhoneNumber: "484-223-7831",
      Website: "N/A",
      Specialty: "Professional Shoots, All Styles, Occasions"
    } // line ends Kyle's Photography info
  }, // line ends photo info
  musEnt: {
    "Mark's Studios": {
      Address: "2407 Linden Street Chester, Pa 19013",
      PhoneNumber: "267-808-4256",
      Website: "www.markstudios.com",
      Specialty: "R&B, Hip Hop"
    }, // line ends Mark's Studios info
    "CC Moore Recording Studio": {
      Address: "1420 Melrose Avenue Chester, Pa 19013",
      PhoneNumber: "267-615-2009",
      Website: "www.ccmoorestudio.com",
      Specialty: "All Genres"
    } // line ends CC Moore Recording info
  }, // line ends musEnt category paint: {
  "Ulysses's Paint": {
    Address: "2201 Edgmont Avenue Chester Pa 19013",
    PhoneNumber: "267-298-0845",
    Website: "www.ulyssespaint.com",
    Specialty: "Mixing Paint, Selling All Paint Types"
  }, // line ends Ulysses's Paint info
  "Dock Paint Supplies": {
    Address: "1007 W. 7th Street Chester, Pa 19013",
    PhoneNumber: "484-318-5190",
    Website: "N/A",
    Specialty: "All Paint Type Supplies"
  } // line ends Mark's Studios info
}, // line ends paint category info
}; // line ends "multi-dimensional" array object

var businessListNames = [];
var selectedCategory;
var textNameOfBusinessSelected;
var nameOfBusinessesUnderCategory;

function businessListingResults(databaseList) {
  // function is for when a category is selected
  selectedCategory = $("#select-business-listing option:selected").val();
  textNameOfBusinessSelected = $("#select-business-listing 
      option: selected ").text();
      nameOfBusinessesUnderCategory = databaseList[selectedCategory];
      for (findBusinessUnderCategory in nameOfBusinessesUnderCategory) {
        businessListNames.push(findBusinessUnderCategory);
        console.info(findBusinessUnderCategory);
      } // line ends for in loop
      console.info("ice cream"); $("#listingResults").html("Business Listings Under Category <strong>" +
        textNameOfBusinessSelected + "</strong> are: <br/><br/><ul 
        id = 'listOfBusinesses' > < li > < a href = 'javascript-exercise-16.html#bottomOfPage'
        onclick = 'clickListingLink()' > " + businessListNames.join(" < br / > < a href = 'javascript-exercise-16.html#bottomOfPage'
        onclick = 'clickListingLink()' >
        <
        li > ") + " < /li></ul > ");
      } // line closes function

      function clickListingLink() {
        // function is for when a link is clicked after list of businesses appear
        $('#listOfBusinesses').on('click', 'li', function() {
          clickListingLink();
          console.info('you clicked me');
          seeListingInfoTable();
          $("hr").show();
        });
      }

      function seeListingInfoTable(titleOfBusinessSelected, businessLinkSelected) {
        // function is for table that shows info of specific link clicked 
        console.info("apple");
        var tbl = "";
        tbl += '<table class = "table table-hover">';
        tbl += '</table>';
        tbl += '<tbody>';
        tbl += '<caption class = "listingTitle">' + titleOfBusinessSelected +
          '</caption>';
        tbl += '<tr>';
        tbl += '<th>Address</th>';
        tbl += '<th>Phone Number</th>';
        tbl += '<th>Website</th>';
        tbl += '<th>Specialty</th>';
        tbl += '</tr>';
        tbl += '<tr>';
        tbl += '<td><div class = "row_data" edit_type = "click" col_name = "fname">' +
          businessLinkSelected["Address"] + '</div></td>';
        tbl += '<td><div class = "row_data" edit_type = "click" col_name = "fname">' +
          businessLinkSelected["Phone Number"] + '</div></td>';
        tbl += '<td><div class = "row_data" edit_type = "click" col_name = "fname">' +
          businessLinkSelected["Website"] + '</div></td>';
        tbl += '<td><div class = "row_data" edit_type = "click" col_name = "fname">' +
          businessLinkSelected["Specialty"] + '</div></td>';
        tbl += '</tr>';
        tbl += '</tbody>';
        tbl += '</table>';
        $(document).find("#infoTable").html(tbl);
      } // line ends seeListingInfoTable function
<h4 class = "title">Select a Category from the drop down menu to check your local businesses</h4>
<br/>
<select id = "select-business-listing" name = "submitted[select_your_program]" class = "select-a-business">
  <option value = "" selected = "selected">- Select a business category -</option>
  <option value = "hair">Hair</option>
  <option value = "healBeauty">Health and Beauty</option>
  <option value = "food">Food</option>
  <option value = "travel">Travel</option>
  <option value = "fitness">Fitness</option>
  <option value = "retCloth">Retail and Clothing</option>
  <option value = "auto">Automotive</option>
  <option value = "homeDec">Home Decor</option>
  <option value = "photo">Photography</option>
  <option value = "musEnt">Music and Entertainment</option>
  <option value = "paint">Paint</option>
</select>
<br/>
<br/>
<br/>
<button class = "listingsBtn" onclick = "businessListingResults(businessListings)">Search Listings</button>
</div>
<p id = "listingResults"></p>
<br/>
<br/>
<hr/>
<br/>
<div id = "bottomOfPage">
  <div id = "infoTable">
  </div>

Поместите свой код в блок кода CSS / HTML / JS ... или на такой веб-сайт, как jsfiddle.net

Elias 02.10.2018 17:41

Пожалуйста, предоставьте минимальный, полный, проверяемый и хорошо отформатированный пример. Этот блок кода трудно читать и понимать. -> Как отформатировать блоки кода?

Andreas 02.10.2018 17:42

Это не минимально, но я, по крайней мере, переместил код в фрагмент для них и нажал аккуратно, чтобы он стал немного более управляемым.

Herohtar 02.10.2018 17:46

Хорошо, приношу свои извинения по поводу форматирования. Сейчас исправлю.

Aishah91 02.10.2018 18:06

@Elias Вот моя ссылка на скрипку> jsfiddle.net/Angel91/pe8vuq2f

Aishah91 02.10.2018 18:26

буду смотреть на это, когда я дома

Elias 02.10.2018 18:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
223
1

Ответы 1

Итак, Здравствуйте: D "надеюсь" последний раз (в этом посте;)).

Я переписал ваш код, теперь это уже не код ваш, но я думаю, вы должны прочитать его 2–3 раза и изучить те биты, которые вы еще не знали :). (это немного более структурировано).

Хорошего дня, Элиас :)

// Define Database
var businessListings = {
  hair: {
    "Tina's Hair Salon": {
      Address: "1520 Lakeview Drive Chester, Pa 19013",
      PhoneNumber: "610-872-1109",
      Website: "www.tinahair.com",
      Specialty: "All hair types"
    },
    "Dollhouse Hair Studio": {
      Address: "485 4th Street Chester, Pa 19013",
      PhoneNumber: "484-419-8595",
      Website: "www.dhhairstudio.com",
      Specialty: "Braiding, All hair types"
    }
  },
  healBeauty: {
    "Myra 's Make-Up Kit": {
      Address: "4260 Jeffrey Lane Chester, Pa 19013",
      PhoneNumber: "610-848-2014",
      Website: "www.mymakeupkit.com",
      Specialty: "Make all skin tones, ages, events"
    },
    "Purity Spa": {
      Address: "213 W. 24th Street Chester, Pa 19013",
      PhoneNumber: "267-608-4752",
      Website: "www.purityspa.com",
      Specialty: "Universal"
    }
  },
  food: {
    "Larry's Pies": {
      Address: "250 3rd Street Chester, Pa 19013",
      PhoneNumber: "610-724-2008",
      Website: "N/A",
      Specialty: "Pies, Desserts"
    },
    "C-Pride Super Market": {
      Address: "3018 W. 7th Street Chester, Pa 19013",
      PhoneNumber: "610-803-2020",
      Website: "www.cpridemarket.com",
      Specialty: "All Foods, Groceries"
    }
  },
  travel: {
    "G&W Travel Agency": {
      Address: "200 Avenue of States Chester, Pa 19013",
      PhoneNumber: "484-203-8587",
      Website: "www.gandwtravel.com",
      Specialty: "Traveling, All Occasions"
    },
    "Grant Travel Agency": {
      Address: "1834 Edward Street Chester, Pa 19013",
      PhoneNumber: "267-515-7062",
      Website: "N/A",
      Specialty: "Traveling, All Occasions"
    }
  },
  fitness: {
    "Elijah's Supreme Gym": {
      Address: "420 Tilghman Street Chester, Pa 19013",
      PhoneNumber: "610-898-5040",
      Website: "www.esupremegym.com",
      Specialty: "Fitness, All Body Types"
    },
    "Fitness Girl Gym": {
      Address: "2790 E. 15th Street Chester, Pa 19013",
      PhoneNumber: "267-762-8240",
      Website: "www.esupremegym.com",
      Specialty: "Fitness, All Body Types"
    }
  },
  retCloth: {
    "Enid and 4 Girls Boutique": {
      Address: "2200 Edgmont Avenue Chester, Pa 19013",
      PhoneNumber: "610-203-8570",
      Website: "www.enidand4girls.com",
      Specialty: "Clothing, Accessories"
    },
    "Fatima & Iman's Closet": {
      Address: "824 Parker Street Chester, Pa 19013",
      PhoneNumber: "610-800-1937",
      Website: "www.fatimaandiman.com",
      Specialty: "Clothing, Accessories"
    }
  },
  auto: {
    "Arthur's": {
      Address: "1019 Edgmont Avenue Chester, Pa 19013",
      PhoneNumber: "484-626-1149",
      Website: "N/A",
      Specialty: "All Vehicle Issues"
    },
    "Johnson and Son Mechanics": {
      Address: "517 Pennell Street Chester, Pa 19013",
      PhoneNumber: "610-504-8127",
      Website: "www.johnsonandsons.com",
      Specialty: "Auto Body Work"
    }
  },
  homeDec: {
    "Charisma Home Decor": {
      Address: "7790 Melrose Avenue Chester, Pa 19013",
      PhoneNumber: "610-203-9045",
      Website: "www.charismahomedecor.com",
      Specialty: "Handcrafted Home Decor, Elegant Home Decor, All Styles"
    },
    "Lily's Home Decor": {
      Address: "1402 Ward Road Chester, Pa 19013",
      PhoneNumber: "267-761-2990",
      Website: "www.lilydesign.com",
      Specialty: "All Styles"
    }
  },
  photo: {
    "Marple Photography": {
      Address: "618 Taylor Avenue Chester, Pa 19013",
      PhoneNumber: "610-499-8615",
      Website: "www.marplephotography.com",
      Specialty: "All Styles, Occasions"
    },
    "Kyle's Photography": {
      Address: "216 W. 9th Street Chester, Pa 19013",
      PhoneNumber: "484-223-7831",
      Website: "N/A",
      Specialty: "Professional Shoots, All Styles, Occasions"
    }
  },
  musEnt: {
    "Mark's Studios": {
      Address: "2407 Linden Street Chester, Pa 19013",
      PhoneNumber: "267-808-4256",
      Website: "www.markstudios.com",
      Specialty: "R&B, Hip Hop"
    },
    "CC Moore Recording Studio": {
      Address: "1420 Melrose Avenue Chester, Pa 19013",
      PhoneNumber: "267-615-2009",
      Website: "www.ccmoorestudio.com",
      Specialty: "All Genres"
    }
  },
  paint: {
    "Ulysses's Paint": {
      Address: "2201 Edgmont Avenue Chester Pa 19013",
      PhoneNumber: "267-298-0845",
      Website: "www.ulyssespaint.com",
      Specialty: "Mixing Paint, Selling All Paint Types"
    },
    "Dock Paint Supplies": {
      Address: "1007 W. 7th Street Chester, Pa 19013",
      PhoneNumber: "484-318-5190",
      Website: "N/A",
      Specialty: "All Paint Type Supplies"
    }
  }
}

// Add change event listener to the select
$("#businessListing_select").change(() => {
  getDataBaseEntries($("#businessListing_select option:selected").val(), businessListings);
});

function getDataBaseEntries(category, dataBase) {
  Object.keys(dataBase[category]).forEach(listing => {
    // Create A paragraph
    let paragraph = document.createElement("p");
    // Set the text
    paragraph.innerText = listing;
    paragraph.style.textDecoration = "underline";
    // Add click event listener
    paragraph.addEventListener("click", function() { 
        // Clear the old html
        $("#infoTable").html("");
        // store the information in a variable
        let information = dataBase[category][listing];
        // `` == multiline string :) In a multiline string you can use "${}" to execute code
        $("#infoTable").html
        (`
          <table cellspacing = "0" cellpadding = "5">
            <thead>
              <th>Address</th>
              <th>Phone Number</th>
              <th>Website</th>
              <th>Specialty</th>
            </thead>
            <tbody>
              <tr>
                <td>${information.Address}</td>
                <td>${information.PhoneNumber}</td>
                <td>${information.Specialty}</td>
                <td>${information.Website}</td>
              </tr>
            </tbody>
          </table>
        `);
      });
    // Append the paragraph
    $("#listingResults").append(paragraph);
  })
};
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<style>
    table,th,td {
        border: 1px solid black;
    }
</style>
<h4 class = "title">Select a Category from the drop down menu to check your local businesses</h4>
<br>
<select id = "businessListing_select" class = "select-a-business">
    <option value = "" selected = "selected">- Select a business category -</option>
    <option value = "hair">Hair</option>
    <option value = "healBeauty">Health and Beauty</option>
    <option value = "food">Food</option>
    <option value = "travel">Travel</option>
    <option value = "fitness">Fitness</option>
    <option value = "retCloth">Retail and Clothing</option>
    <option value = "auto">Automotive</option>
    <option value = "homeDec">Home Decor</option>
    <option value = "photo">Photography</option>
    <option value = "musEnt">Music and Entertainment</option>
    <option value = "paint">Paint</option>
</select>
<br>
<br>
<br>
<p id = "listingResults"></p>
<br>
<br>
<hr>
<br>
<div id = "bottomOfPage">
    <div id = "infoTable"></div>
</div>
<script src = "./index.js"></script>

Причина, по которой аргументы пусты, когда я вызываю функцию seeListingInfoTable, заключается в том, что я не знаю, как получить значения того, что мне нужно. Я подумал, что узнаю об этом после того, как получу помощь с частью стола. Я хочу, чтобы заголовок выбранного бизнес-пользователя и название компании были аргументами. Просто не знаю, как их достать.

Aishah91 03.10.2018 15:59

Ох, но они могут добавить это к вопросу. Вы запутаете людей.

Elias 03.10.2018 16:06

Хорошо, я понимаю, о чем вы говорите. Это вам так много за вашу помощь.

Aishah91 03.10.2018 17:02

Я еще раз посмотрю на это позже

Elias 03.10.2018 18:12

Большое тебе спасибо. Я ценю это.

Aishah91 03.10.2018 21:14

Я обновил свой код ... сейчас ... xD потратил много времени на эту проблему, не так ли: P

Elias 04.10.2018 09:01

Спасибо. Я думаю, ваш код слишком продвинут для моего уровня. Но все равно большое вам спасибо.

Aishah91 04.10.2018 15:44

Просто прочтите это несколько раз :) и напишите комментарий, если вам нужна помощь :)

Elias 04.10.2018 15:52

Просто спроси меня о деталях, которые тебе не достаются :)

Elias 04.10.2018 15:57

Спасибо! Я очень ценю это :)

Aishah91 04.10.2018 16:11

Во-первых, я только что перенес ваш код в свой файл, и он не работает, как в фрагменте. Плюс кнопки нет.

Aishah91 04.10.2018 16:14

да: D, потому что он автоматически активируется при изменении выбора :) И я не знаю, почему он не запускается

Elias 04.10.2018 16:24

Нет, но у этого, вероятно, нет <script src = "<path>"></script>, так как вам не нужно делать это в кодовом блоке SO (я говорю о файле HTML)

Elias 04.10.2018 17:32

Хорошо спасибо. Как вы добились того, чтобы таблица отображалась после того, как был выбран один из вариантов ссылки?

Aishah91 04.10.2018 17:33

Насколько я понимаю, так оно и есть. Вы создаете элемент как тег p, затем вы установили для innerText значение «листинг», затем присвоили ему стиль подчеркивания, прослушиватель событий сообщает, что если элемент щелкнул, поместите элемент #infoTable в .html, переменная let информация установлена в базу данных [категория] [список]; но я не понимаю, как> база данных [категория] [список]; вытаскивает информацию.

Aishah91 04.10.2018 17:48

Я написал это выше: «эти символы приводят к многострочной строке, а в многострочной строке вы можете использовать $ {<variable / code>}, чтобы вставить в нее код. Посмотрите на <td> часть строки

Elias 05.10.2018 08:01

Другие вопросы по теме