#javascript #html #node.js
Вопрос:
У меня есть кнопка, которая создается с использованием информации базы данных. Например, если я вставлю имя «джон» в возрасте 15 лет в базу данных, на html-странице будет сгенерирована кнопка с текстом «джон» вместе с его возрастом. Это делается с помощью функции appendData, и кнопки отображаются путем перебора данных и добавления их на html-страницу.
Я хочу, чтобы это было так, чтобы, если я нажму на кнопку с текстом «джон», у меня будет отображаться слово «джон» и 15 сбоку.
Я попытался отправить данные[i], но это не работает. Может кто-нибудь, пожалуйста, помочь? Спасибо
<div id="myData" ></div>
<aside>
<p>Details: </p>
<p id="configurationdetails"></p>
</aside>
<script>
fetch('http://localhost:3000/result')
.then(function (response) {
return response.json();
})
.then(function (data) {
appendData(data);
})
.catch(function (err) {
console.log('error: ' err);
});
function appendData(data) {
var mainContainer = document.getElementById("myData");
for (var i = 0; i < data.length; i ) {
var div = document.createElement("div");
div.innerHTML = '<div class="container"> <div class="solid"> <button id="btn" class="btn" onclick="showinfo(' data[i] ')">' 'name ' data[i].person_name data[i].age '</button> </div></div>';
mainContainer.appendChild(div);
}
}
function showinfo(info) {
document.getElementById("configurationdetails").innerHTML = info;
}
Ответ №1:
Быстрый способ исправить это-не передавать объект, а просто значение i
в функции ShowInfo:
data = [{person_name:"henk", age:33}, {person_name:"wim", age:34}]
appendData(data)
function appendData(data) {
// save data for later
window.data = data
var mainContainer = document.getElementById("myData");
for (var i = 0; i < data.length; i ) {
var div = document.createElement("div");
div.innerHTML = '<div class="container"> <div class="solid"> <button id="btn" class="btn" onclick="showinfo(' i ')">' 'name ' data[i].person_name data[i].age '</button> </div></div>';
mainContainer.appendChild(div);
}
}
function showinfo(i) {
document.getElementById("configurationdetails").innerHTML = data[i].person_name " " data[i].age;
}
Комментарии:
1. Я пытался это сделать, но, к сожалению, у меня это не работает. Я попытался нажать на кнопку, но в div ничего не появляется
2. Вы можете видеть, что это работает в этом JSFiddle: jsfiddle.net/3rukaz91/1 . Есть ли что-то другое в вашем коде?
3. У меня есть выборка, которая получает информацию из базы данных sql. Я попытался сравнить наши коды, и ошибка появляется только тогда, когда я изменяю данные = [{имя человека:»хенк», возраст:33}, {имя человека:»вим», возраст:34}] с помощью выборки для получения данных
4. Вы, наверное, не ждете, пока закончится доставка? Вам придется включить код выборки в свой вопрос, иначе трудно понять, что вы упускаете.
5. Я думаю, что вы не сохраняете
data
глобально, поэтому вshowInfo
функции данные не найдены. Вы можете исправить это, «сохранив» данные в глобальной области в началеappendData
Ответ №2:
я только что создал ectra div с идентификатором «contentFromUrl» при первой загрузке страницы и вызове api, чтобы он заполнял данные в div, а при повторном нажатии кнопки fetch заполнял данные.
я предоставил два случая, которые вам нравятся, вы можете выбрать!
<div id="myData" ></div>
<div id="contentFromUrl"></div>
<aside>
<p>Details: </p>
<p id="configurationdetails"></p>
</aside>
<script>
fetch('http://localhost:3000/result')
.then(function (response) {
return response.json();
})
.then(function (data) {
appendData(data);
})
.catch(function (err) {
console.log('error: ' err);
});
function appendData(data) {
var mainContainer = document.getElementById("myData");
for (var i = 0; i < data.length; i ) {
var div = document.createElement("div");
div.innerHTML = '<div class="container"> <div class="solid"> <button id="btn" class="btn" onclick="showinfo(' data[i] ')">' 'name ' data[i].person_name data[i].age '</button> </div></div>';
document.getElementById("contentFromUrl").innerHTML = data[i].person_name data[i].age;
mainContainer.appendChild(div);
}
}
function showinfo(info) {
document.getElementById("configurationdetails").innerHTML = info;
document.getElementById("contentFromUrl").innerHTML = info.person_name info.age;
}
Комментарии:
1. Я пытался сделать это, но ничего не появляется, когда я нажимаю на кнопку