Я пишу код интерфейса для веб-сайта, используя jQuery, AJAX и Handlebars.js.
У меня есть файлы HTML, CSS и script.js.
Я довольно новичок в Javascript и методах. Это первый раз, когда я использую Handlebars в своем коде.
Я использовал разбор JSON для анализа всей информации, представленной в URL. Это
что-то вроде
{"products":
[{"id": 0,
"name": "Ocean Blue Shirt",
"description": "<p>Ocean blue cotton shirt with a narrow collar and
buttons down the front and long sleeves. Comfortable
fit and tiled kalidoscope patterns. </p>",
"category": "men",
"image_url": "https://burst.shopifycdn.com/photos/young-man-in-bright-
fashion_925x.jpg",
"unit_cost": 92.95,
"inventory": 0},
{"id": 1,
"name": "Classic Varsity Top",
"description": "<p>Womens casual ......}
..
..
]}
Я создал кнопки и использовал {{name}} для создания нескольких кнопок с повторяющимися именами. Моя цель - сделать так, чтобы каждая кнопка содержала соответствующий {{description}} в «модальном» виде, когда я нажимаю на них.
Мне удалось получить одну первую кнопку (названную с помощью {{name}}), отображающую ее описание, начиная с «Ocean blue cott .....», когда я нажимаю на нее, однако я не могу чтобы получить что-нибудь, если я нажму на любую другую кнопку (с другими {{name}} s.
Пожалуйста, посмотрите на код и помогите мне понять, что не так, спасибо!
script.js
var myRequest = new XMLHttpRequest()
myRequest.open('GET' , 'http://127.0.0.1:8010/products' )
myRequest.onload = function() {
var myData = JSON.parse(myRequest.responseText)
createHTML(myData)
// Get the modal
var modal = document.getElementById("myModal")
// Get the button that opens the modal
var btn = document.getElementById("myBtn")
// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0]
// When the user clicks on the button, open the modal
btn.onclick = function() {
modal.style.display = "block"
}
// When the user clicks on <span> (x), close the modal
span.onclick = function() {
modal.style.display = "none"
}
}
myRequest.send()
function createHTML(data) {
var template = document.getElementById("prodTemp").innerHTML
var compiledTemplate = Handlebars.compile(template)
var genHTML = compiledTemplate(data)
var prodContainer = document.getElementById("prod-container")
prodContainer.innerHTML = genHTML
}
index.html
{{#each products}}
<tr>
<td>
<!-- Trigger/Open The Modal -->
<button id="myBtn">{{name}}</button>
<!-- The Modal -->
<div class = "modal" id="myModal" >
<!-- Modal content -->
<div class="modal-content">
<span class="close">×</span>
<li >Product Description: {{{description}}}</li>
</div>
</div>
</td>
<td>
${{unit_cost}}
</td>
</tr>
{{/each}}