duanbo1659 2019-02-26 15:29
浏览 65

HTML / CSS / PHP / JavaScript | 下拉内容未显示在所选下拉按钮附近

A little bit of backstory and info about my knowledge of code:

I have been learning code for 2-3 years and I am currently working on a Web application with a classmate, and we are nearly done. I mainly did the HTML/CSS part and he mainly did the PHP/JavaScript part, so my knowledge is mostly HTML and CSS.

My problem:

My classmate has coded a system where certain 'badges' are in certain levels, and you can drag them around into different levels. These badges are retrieved from a database, and then made using some form of a loop that runs for every badge in the database. This happens with some HTML code in PHP. This part works fine.

Image of badges and levels here

Now comes my problem: I'm trying to create some form of a dropdown menu within each individual 'badge', but while the dropdown buttons appear in every 'badge', the dropdown content only appears near the first button. I don't know if it is the same content that is triggered by every button, or if it is different content that is appearing in the same spot for some reason. If someone could tell me what is exactly going wrong and how to fix it, that would be greatly appreciated. (we have to have our project finished on 5 or 6 febuary 2019).

First dropdown button clicked

Fourth dropdown button clicked

As you can see, it appears in the same spot yet different buttons are clicked.

Code used:

Main code consisting of HTML, PHP and JavaScript:

<!DOCTYPE html>

<head>
    <title>Badges</title>
    <link rel="stylesheet" href="main.css" />
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script src="BadgePage.js"></script>
</head>

<body style="margin:0">
    <div id="container">
      <div id="home">
        <a href="workinprogress.html">
          <button class="home-button">
            <img src="img/MCC.png" width="200" height="60">
          </button>
        </a>
      </div>
      <div id="BP-link" class="nav">
        <a href="Testing2.php"><button class="bpbutton">Badges</button></a>
      </div>
      <div id="lln_page" class="nav">
        <a href="LeerlingenPage.php"><button class="llnpbutton">Leerlingen</button></a>
      </div>
      <div id="main">
        <div class="main">

          <?php
            $link = mysqli_connect("localhost", "root", "", "badgedb");

            $lev = 1;
            $levAantal = 3;

            for($lev;$lev<=$levAantal;$lev++){
            echo '<div id="level' . $lev . '" class="levelID">';
            echo '<p class="level">Level ' . $lev . '</p>';
            echo '<ul class="itemList Level-' . $lev . ' ui-sortable" id="L' . $lev . '">';

            if($link === false){
                die("ERROR: Could not connect. " . mysqli_connect_error());
            }
            $sql = "SELECT * FROM badges";
            if($result = mysqli_query($link, $sql)){
              if(mysqli_num_rows($result) > 0){
          } else{
              echo "No records matching your query were found.";
          }
        } else{
          echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
        }


              while($row = mysqli_fetch_array($result)){
                        if($row['level'] == $lev){
                          echo "    <li class='item'>
                                      <link rel='stylesheet' href='side.css' />
                                      <script type='text/javascript'>
                                        /* When the user clicks on the button,
                                        toggle between hiding and showing the dropdown content */
                                        function myFunction() {
                                        document.getElementById('myDropdown').classList.toggle('show');
                                        }

                                        // Close the dropdown menu if the user clicks outside of it
                                        window.onclick = function(event) {
                                        if (!event.target.matches('.dropbtn')) {
                                          var dropdowns = document.getElementsByClassName('dropdown-content');
                                          var i;
                                          for (i = 0; i < dropdowns.length; i++) {
                                            var openDropdown = dropdowns[i];
                                            if (openDropdown.classList.contains('show')) {
                                              openDropdown.classList.remove('show');
                                            }
                                          }
                                        }
                                        }
                                      </script>
                                      <img src='img/" . $row['afbeelding'] . "' alt='Item Number " . $row['ID'] . "' class='itemImage' id='" . $row['ID'] . "'>
                                      <div class='dropdown'>
                                        <button onclick='myFunction()' class='dropbtn'>Dropdown</button>
                                        <div id='myDropdown' class='dropdown-content'>
                                          <button href='#'>Link 1</button>
                                          <button href='#'>Link 2</button>
                                        </div>
                                      </div>
                                    </li>";
                        }
                      }
                      echo "</ul>";
                      echo "</div>";
              }
              ?>
            <script type="text/javascript">
              function onSubmit(){
                var badgeID;
                var Alpha = 1;
                const search = $('.main > div.levelID > ul > li > img');
                const badges = {};
                const hrefDir = location.href.replace(/(^.*\/).*?$/, '$1'); // http://localhost/PWS/Testing2.php -> http://localhost/PWS/
                for (const badge of search) {
                  const levelID = parseInt(badge.parentElement.parentElement.id.replace('L', ''));
                  if (badge.id){
                    badgeID = parseInt(badge.id);
                  }
                  else {
                    badgeID = 0;
                  }
                  const badgeImg = badge.src.replace(hrefDir + 'img/', '');
                  badges[Alpha] = {
                    level: levelID,
                    afbeelding: badgeImg,
                    ID: badgeID
                  }
                  Alpha++;
                }

                $.ajax('api/update-order.php', {
                  data: badges
                });/*.done((data)=>{
                  console.log(data)
                });
                console.log(badges);/**/
                alert("Data uploaded!");
              }
            </script>
               <input type="button" onclick="onSubmit()" value="submitter">
          <!-- <div class="optionsButton">
            <div class="dropdown">
              <button class="dropbtn"><img src="img/cogwheel.png" alt="opties" class="options"></button>
              <div class="dropdown-content">
                <p>YEET</p>
              </div>
            </div>
          </div> -->
        </div>
      </div>
    </div>
</body>

Main CSS document:

* {
  box-sizing: border-box;
}

#myInput {
  background-color: white;
  width: 40%;
  font-size: 16px;
  padding: 12px 20px 12px 40px;
  border: 1px solid #ddd;
  margin-bottom: 12px;
  margin-left: 30%;
}

#myTable {
  border-collapse: collapse;
  width: 80%;
  border: 1px solid #ddd;
  font-size: 18px;
  margin: 0 auto;

}

#myTable th, #myTable td {
  text-align: left;
  padding: 12px;
}

#myTable tr {
  border-bottom: 1px solid #ddd;
}

#myTable tr.header, #myTable tr:hover {
  background-color: #f1f1f1;
}

body {
    margin: 0;
}

}
.dropbtn {
  background-color: darkgray;
  border-left: solid;
  border-top: solid;
  border-top-left-radius: 10px;
  max-height: 10%;
  max-width: 5%;
  height: 100px;
  width: 100px;
  position: fixed;
  bottom: 0px;
  right: 0px;
}

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  right: 100%;
  top: 0%;
  background-color: darkgray;
  width: auto;
}

.main {
  height: 100%;
}

.options {
  height: 100%;
  width: 100%;
}

p.level {
    width: inherit;
    text-align: center;
    background-color: gray;
    color: white;
    padding: 5px;
    margin-top: 0;
    font-size: 20px;
    border-radius: 10px;
    border: solid darkgray;
}

ul.itemList {
    height: auto;
    min-height: 50px;
}

.ui-sortable-handle {
  width: auto;
}

li.item {
    display: inline-block;
    border: 1px black double;
    background-color: lightgrey;
    padding: auto;
    padding-left: 1%;
    padding-right: 1%;
    margin-left: 0px;
}

img.itemImage {
    height: 150px;
    width: 150px;
}

button.bpbutton {
  height: 100%;
  width: 100%;
  color: white;
  background-color: #F44336;
  border: solid;
  border-color: #F44336;
}

button.bpbutton:hover {
  background-color: #cc1c0e;
  color: lightgray;
}

button.llnpbutton {
  height: 100%;
  width: 100%;
  color: white;
  background-color: #F44336;
  border: solid;
  border-color: #F44336;
}

button.llnpbutton:hover {
  background-color: #cc1c0e;
  color: lightgray;
}

button.home-button {
  height: 100%;
  width: 100%;
  color: white;
  background-color: #F44336;
  border: solid;
  border-color: #F44336;
}

#container {
    display: grid;
    grid-template-columns: 0fr 1fr 1fr;
    grid-template-rows: 1fr 14fr;
    grid-template-areas:"home BP-link lln_page"
                        "main"
}

#home {
    background-color: #F44336;
    padding-left: 10px;
    border-right: dashed #f22615;
    border-bottom: solid #f22615;
    color: white;
    padding-top: 1%;
}

#zoek {
    background-color: #F44336;
    border-right: dashed;
    border-color: #f22615;
    color: white;
    text-align: center;
    border-bottom: solid #f22615;
}

#BP-link {
  background-color: #F44336;
  color: white;
  text-align: center;
  border-bottom: solid #f22615;
  border-right: dashed #f22615;
}

#lln_page {
  background-color: #F44336;
  color: white;
  text-align: center;
  border-bottom: solid #f22615;
}

#main {
    background-color: lightgray;
    width: 100%;
    grid-column: 1 / end;
}

#workinprogress {
  background-image: url(https://www.scansys.eu/scansysfld/uploads/2017/06/Work_In_Progress.png);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  background-color: lightgray;
  width: 100%;
  grid-column: 1 / end;
}

th, td, table {
  border: 1px black solid;
  border-collapse: collapse;
}

textarea.comment {
  resize:none;
  height:50px;
  width:90%;
}

.buttonForSubmit {
  text-align: center;
}

#submitButton {
  height:50px;
  width:60px;
}

CSS document specifically for the dropdown components:

.dropbtn {
  background-color: #3498DB;
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
  cursor: pointer;
}

.dropbtn:hover, .dropbtn:focus {
  background-color: #304870;
}

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f1f1f1;
  width: 100%;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}

.dropdown-content button {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  width: 100%;
}

.dropdown-content button:hover {background-color: #ddd}

.show {display:block;}

Image of Database, should you need it.

Thank you for reading, and I hope you or someone else can help us. Please tell me if you need anything else.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 ogg dd trandata 报错
    • ¥15 高缺失率数据如何选择填充方式
    • ¥50 potsgresql15备份问题
    • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
    • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
    • ¥60 pb数据库修改与连接
    • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
    • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
    • ¥20 神经网络Sequential name=sequential, built=False
    • ¥16 Qphython 用xlrd读取excel报错