삽입하는 데이터를 동적으로 부트스트랩달 배열에서 객체 바닐라 javascript

0

질문

안녕하세요 저는 노력을 동적으로 데이터를 입력으로 모달하지만는 데 문제가 정확한 데이터이다.
나는 것입니다 간단히 설명해 프로젝트
저는 2 개의 드롭다운 메뉴가 있습니다.
그 메뉴이 채워지는 옵션을 동적으로에서 입력 2 배열입니다.
중 하나를 선택할 때 또는 모두에서 옵션 메뉴를 선택하는 새로운 배열이다.
새로운 배열은 다음 여과하고 반만 일치하는 결과 버튼이 있습니다.
버튼을 열어달는 곳에 나가고 싶은 gif 표시됩니다.
이제 여기에 나 있는 곳에 붙어 나가는 데이터에 나타나는 모달 하지만 그것은 특정 데이터를 해당 버튼을 대신 그것을 표시합니다 1gif 에서 새로운 배열입니다.
배 객체는 다음과 같이 나타납니다
{본문:'넥',장비:'체중',gifUrl:'http://d205bpvrqc9yn1.cloudfront.net/1403.gif'id:'1403',이름:'목 측면 스트레치',...}


작동 코드 조각
https://jsfiddle.net/q08dw5mn/
html
<div class="row-md-6 offset-md-2">
  <div class="col-sm-10" style="border:1px solid blue">
    Logo goes here 

    <div class="row">
      <div class="col-8 col-sm-6" style="border:1px solid red">
        <div id="exercises" class="bg-primary align-items-center dropdown"></div> <!--------Dropdown Buttons-->
      </div>
      <div class="col-4 col-sm-6 resultdiv" style="border:1px solid red">
        <div id="data"></div> <!--Result Data-->
      </div>
    </div>
  </div>
</div>

<!--! Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div id="modalImg" class="modalBody">
        <!-- MODAL IMAGE GOES HERE -->
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>


javascript

const dataDiv = document.getElementById("data")
const apiURL = 'https://exercisedb.p.rapidapi.com/exercises/bodyPart/%7Bchest%7D'

let mainList = []
let bodypartsList = []
let equipmentList = []


async function getApiURL(endpoint, value) {
    const response = await fetch(`https://exercisedb.p.rapidapi.com/exercises/${endpoint}/${value}`, {
        "method": "GET",
        "headers": {
            "x-rapidapi-host": "exercisedb.p.rapidapi.com",
            "x-rapidapi-key": "360a6abca3mshcfce9cbd521f228p1e181djsn14d1d0e4c955"
        }
    })
    const data = await response.json();
    if (endpoint == "bodypart") {
        bodypartsList = data
    } else {
        equipmentList = data
    }
    mergeLists()
}

function mergeLists() {
    mainList = bodypartsList.concat(equipmentList);
    displayData(mainList)
}


//bodypart code
const bodyparts = ["Body Parts", "back", "cardio", "chest", "lower arms", "lower legs", "neck", "shoulders", "upper arms", "upper legs", "waist"]
const equipment = ["Equipment", "assisted", "band", "barbell", "body weight", "cable", "dumbbell", "kettlebell", "leverage machine", "medicine ball", "resistance band", "roller", "rope", "smith machine", "trap bar", "weighted"]


const exercises = document.getElementById("exercises");


window.addEventListener("load", function () {
    createDropdown("bodypart", bodyparts);
})
window.addEventListener("load", function () {
    createDropdown("equipment", equipment);
})


function createDropdown(name, items) {
    const select = document.createElement("select"); //---create the select element
    select.className = "selectMenu"
    select.name = name
    select.id = name
    for (let i = 0; i < items.length; i++) { //---as long as 'i' is less than the number of items increase by 1
        const item = items[i]; //---declaring 'i' as items
        const option = document.createElement("option"); //---create options for select
        option.setAttribute("value", item); //---places item value into options
        option.innerHTML = item; //---change content of options to items
        select.appendChild(option); //---append options to select

    }
    exercises.appendChild(select); //---append select to exercises div


    select.addEventListener("change", function () {
        const item = select.value;
        dataDiv.innerHTML = ''; //<------Clears previous results from page
        getApiURL(name, item);
    })
}


function displayData(data) {
    let d1 = document.getElementById("equipment")
    let d2 = document.getElementById("bodypart")
    let result = data;
    if (d1.selectedIndex > 0) {
    const selected = d1.value;
    result = result.filter(({equipment}) => equipment.includes(selected));
    }

    if (d2.selectedIndex > 0) {
    const selected = d2.value;
    result = result.filter(({bodyPart}) => bodyPart.includes(selected));
    }

    //Filter based on value
    // const result = data.filter(word => {
    //     let check = word.name.indexOf(d1.value)
    //     let check2 = word.name.indexOf(d2.value)
    //     if (check !== -1 || check2 !== -1) {
    //         return word
    //     } else {
    //         return 
            
    //     }
    // });
    const unique = [];
    const uniqueImg = [];

    //Filter our duplicates
    result.map(x => unique.filter(a => a.id == x.id).length > 0 ? null : unique.push(x));
    console.log(unique);

    result.map(x => uniqueImg.filter(a => a.id == x.id).length > 0 ? null : uniqueImg.push(x));
    console.log(uniqueImg);

    unique.forEach(element => {
        const div = document.createElement("div");
        const button = document.createElement("button");
        button.ID = "myBtn"
        // const img = document.createElement("img");
        
        // img.className = "appGifs"
        button.innerHTML = element.name
        // img.src = element.gifUrl
        div.appendChild(button)
        // modalImg.appendChild(img)
        div.className = "card"
        dataDiv.appendChild(div)

        button.className = "dButtons";
        button.setAttribute('data-toggle', 'modal');
        button.setAttribute('data-target', '#exampleModalCenter');
        button.setAttribute('type', 'button');
    });
    
    uniqueImg.forEach(element => {
        const modalImg = document.getElementById("modalImg")
        const img = document.createElement("img");
        img.className = "appGifs"
        img.src = element.gifUrl
        modalImg.innerHTML = (img.gifURL)
        modalImg.appendChild(img)
    });
}

이것은 마지막 퍼즐 조각을 나와있는 여기서 몇 일 동안,그것을 사랑하다면 누군가가 나를 도울 수 있는 통과이
감사
dynamic javascript modal-dialog
2021-11-21 08:40:57
1

최고의 응답

1

당신이 통과하지 않는 데이터의 객체를 모달입니다. 내가 만든 코드를 변경하고 지금은 데이터를 전달할 때 버튼을 클릭합니다.

const dataDiv = document.getElementById("data")
const apiURL = 'https://exercisedb.p.rapidapi.com/exercises/bodyPart/%7Bchest%7D'

let mainList = []
let bodypartsList = []
let equipmentList = []


async function getApiURL(endpoint, value) {
    const response = await fetch(`https://exercisedb.p.rapidapi.com/exercises/${endpoint}/${value}`, {
        "method": "GET",
        "headers": {
            "x-rapidapi-host": "exercisedb.p.rapidapi.com",
            "x-rapidapi-key": "360a6abca3mshcfce9cbd521f228p1e181djsn14d1d0e4c955"
        }
    })
    const data = await response.json();
    if (endpoint == "bodypart") {
        bodypartsList = data
    } else {
        equipmentList = data
    }
    mergeLists()
}

function mergeLists() {
    mainList = bodypartsList.concat(equipmentList);
    displayData(mainList)
}


//bodypart code
const bodyparts = ["Body Parts", "back", "cardio", "chest", "lower arms", "lower legs", "neck", "shoulders", "upper arms", "upper legs", "waist"]
const equipment = ["Equipment", "assisted", "band", "barbell", "body weight", "cable", "dumbbell", "kettlebell", "leverage machine", "medicine ball", "resistance band", "roller", "rope", "smith machine", "trap bar", "weighted"]


const exercises = document.getElementById("exercises");


window.addEventListener("load", function () {
    createDropdown("bodypart", bodyparts);
})
window.addEventListener("load", function () {
    createDropdown("equipment", equipment);
})


function createDropdown(name, items) {
    const select = document.createElement("select"); //---create the select element
    select.className = "selectMenu"
    select.name = name
    select.id = name
    for (let i = 0; i < items.length; i++) { //---as long as 'i' is less than the number of items increase by 1
        const item = items[i]; //---declaring 'i' as items
        const option = document.createElement("option"); //---create options for select
        option.setAttribute("value", item); //---places item value into options
        option.innerHTML = item; //---change content of options to items
        select.appendChild(option); //---append options to select

    }
    exercises.appendChild(select); //---append select to exercises div


    select.addEventListener("change", function () {
        const item = select.value;
        dataDiv.innerHTML = ''; //<------Clears previous results from page
        getApiURL(name, item);
    })
}


function displayData(data) {
    let d1 = document.getElementById("equipment")
    let d2 = document.getElementById("bodypart")
    let result = data;
    if (d1.selectedIndex > 0) {
    const selected = d1.value;
    result = result.filter(({equipment}) => equipment.includes(selected));
    }

    if (d2.selectedIndex > 0) {
    const selected = d2.value;
    result = result.filter(({bodyPart}) => bodyPart.includes(selected));
    }

    const unique = [];

    //Filter our duplicates
    result.map(x => unique.filter(a => a.id == x.id).length > 0 ? null : unique.push(x));
    console.log(unique);

    unique.forEach(element => {
        const div = document.createElement("div");
        const button = document.createElement("button");
        button.ID = "myBtn"
        // const img = document.createElement("img");
        
        // img.className = "appGifs"
        button.innerHTML = element.name
        // img.src = element.gifUrl
        div.appendChild(button)
        // modalImg.appendChild(img)
        div.className = "card"
        dataDiv.appendChild(div)

        button.className = "dButtons";

        button.setAttribute('type', 'button');
        button.onclick = (ev)=> 
        {
           const modalImg = document.getElementById("modalImg")
           const img = document.createElement("img");
           img.className = "appGifs"
           img.src = element.gifUrl
           
           modalImg.innerHTML = ''; // reset
           modalImg.appendChild(img);

           $('#exampleModalLongTitle').text(element.name);
           $('#exampleModalCenter').modal('show');
        }
    });
   
}
2021-11-21 09:26:34

세상에 나가 그것을 알고 있던 무언가가 간단한었을 수 있다. 정말 고마워요
Dave

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................