单击列表项目时消失

时间:2017-09-24 01:02:51

标签: javascript jquery html css

好的,所以我正在尝试为一些随机生成的人建立一个叠加层。这是一个我正在研究的项目,你可以通过一些jQuery和AJAX动态地随机用户,我已经把它们列出来并列出但我需要能够点击它们,它们就像一个模态窗口一样出现。这就是问题所在。当你点击它们时我会显示它们但它们会在页面上消失。造成这种情况的原因是什么?如何解决?忽略模态的节奏我不担心CSS。

let html = "";

$.ajax({
  url: 'https://randomuser.me/api/?results=5000',
  dataType: 'json',
  success: function(data) {
    html += "<ul>"
    for (i = 0; i < 12; i++) {

      html += "<li>";
      html += "<img src=" + '"' + data.results[i].picture.medium + '">';
      html += "<div id='main'>"
      html += "<h3>" + data.results[i].name.first + " " + data.results[i].name.last + "</h3>";
      html += "<p>" + data.results[i].email + "</p>";
      html += "<p>" + data.results[i].location.city + "</p>";
      html += "<p class='popup'>" + data.results[i].phone + "</p>"
      html += "<p class='popup'>" + data.results[i].location.street + ", " + data.results[i].location.state + " " + data.results[i].location.postcode + "</p>";
      html += "<p class='popup'>" + data.results[i].dob + "</p>"
      html += "</div>";
      html += "</li>";
    }
    html += "</ul>"
    $("#employeeList").html(html);

    $("li").on("click", function() {
      $(".overlay").css("display", "block");
      $(".modal").html(this);
      $(".modal").preventDefault();
    });

    $(".overlay").on("click", function() {
      $(".overlay").css("display", "none");
    });

  }
});
* {
  list-style-type: none;
  text-decoration: none;
}

body,
html {
  background-color: #eff2f5;
  margin: 0;
}

ul {
  display: flex;
  flex-wrap: wrap;
  flex: 1;
  margin-right: 25px;
}

.popup {
  display: none;
}

li img {
  width: 110px;
  height: 110px;
  border-radius: 50%;
  margin-right: 15px;
  margin-left: 10px;
  margin-top: 10px;
  margin-bottom: 10px;
}

li {
  flex: 1;
  display: flex;
  flex-direction: row;
  justify-content: center;
  background-color: white;
  border-radius: 5px;
  margin: 12px;
  border: 2px lightgray solid;
  min-width: 400px;
}

li:hover {
  cursor: pointer;
}

.overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 10;
  background-color: rgba(0, 0, 0, 0.5);
  display: none;
}

p {
  color: gray;
  margin: 5px;
  margin-left: 0;
}

#main {
  margin-bottom: 10px;
}

h3 {
  margin-bottom: 0;
}

.modal {
  background-color: grey;
  z-index: 20;
  position: absolute;
  top: 40%;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.25/jquery.fancybox.min.css">
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.25/jquery.fancybox.min.js"></script>
<div class="overlay">
  <div class="modal"></div>
</div>
<h1>Awesome Startup Employee Directory</h1>
<div id="employeeList"></div>

抱歉关于所有内容,但我被困住了。提前谢谢!!

3 个答案:

答案 0 :(得分:0)

这是因为你将“this”传递给了模态,所以我认为最好只复制这样的内容

    $("li").on("click", function () {
      var $li = '<li>' + this.innerHTML +'<li>';
      $(".overlay").css("display", "block");
      $(".modal").html($li);
      //$(".modal").preventDefault();
    });

let html = ""; 

$.ajax({
  url: 'https://randomuser.me/api/?results=5000',
  dataType: 'json',
  success: function(data) {
    html += "<ul>"
    for(i = 0; i < 12; i++) {

       html += "<li>";
       html += "<img src=" + '"' + data.results[i].picture.medium + '">';
       html += "<div id='main'>"
       html += "<h3>" + data.results[i].name.first + " " + data.results[i].name.last + "</h3>";
       html += "<p>" + data.results[i].email + "</p>";
       html += "<p>" + data.results[i].location.city + "</p>";
       html += "<p class='popup'>" + data.results[i].phone + "</p>"
       html += "<p class='popup'>" + data.results[i].location.street + ", " + data.results[i].location.state + " " + data.results[i].location.postcode + "</p>";
       html += "<p class='popup'>" + data.results[i].dob + "</p>"
       html += "</div>";
       html += "</li>";
    }   
      html += "</ul>"
      $("#employeeList").html(html);

    $("li").on("click", function () {
      var $li = '<li>' + this.innerHTML +'<li>';
     $(".overlay").css("display", "block");
     $(".modal").html($li);
     //$(".modal").preventDefault();
  });

    $(".overlay").on("click", function () {
     $(".overlay").css("display", "none");
  });

  }
});
* {
    list-style-type: none;
    text-decoration: none;
}

body, html {
    background-color: #eff2f5;
    margin: 0;
}


ul {
    display: flex;
    flex-wrap: wrap;
    flex: 1;
    margin-right: 25px;

}

.popup {
    display: none;
}

li img {
    width: 110px;
    height: 110px;
    border-radius: 50%;
    margin-right: 15px;
    margin-left: 10px;
    margin-top: 10px;
    margin-bottom: 10px;
}


li {
   flex: 1; 
   display: flex;
   flex-direction: row;
   justify-content: center;
   background-color: white;
   border-radius: 5px;
   margin: 12px;
   border: 2px lightgray solid;
   min-width: 400px;
}

li:hover {
    cursor: pointer;
}

.overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 10;
  background-color: rgba(0,0,0,0.5);
  display: none;
}

p {
    color: gray;
    margin: 5px;
    margin-left: 0;
}

#main {
    margin-bottom: 10px;
}

h3 {
    margin-bottom: 0;
}

.modal {
    background-color: grey;
    z-index: 20;
    position: absolute;
    top: 40%;
}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>AJAX Project</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.25/jquery.fancybox.min.css">
    <link rel="stylesheet" href="css/main.css">
</head>
<body>
<div class="overlay">
     <div class="modal"></div>
</div>
 <h1>Awesome Startup Employee Directory</h1>
 <div id="employeeList"></div>
  <script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script> 
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.25/jquery.fancybox.min.js"></script>
  <script src="js/main.js"></script>    
 </body>
</html>

答案 1 :(得分:0)

复制li并传入副本,而不是传入原始的li节点。同时接受回调中的event参数,并致电event.preventDefault而不是$(".modal").preventDefault以解除preventDefault is not a function错误。

$("li").on("click", function (event) {
    event.preventDefault()
    $(".overlay").css("display", "block");
    $(".modal").html($(this).clone());
});

答案 2 :(得分:0)

你可能会改变一些事情。

  1. 您的循环中有一个全局i
  2. 你的循环中有一个重复的id='main',产生无效的html,使用一个类
  3. 不确定.preventDefault();正在阻止什么......但是应该使用该事件呢?我评论了它。
  4. 为什么你的html宣告成功?
  5. 为什么在成功事件处理程序中有事件处理程序附件?
  6. 在重叠事件处理程序中,您再次搜索它,使用this
  7. 使用.show().hide()比使用css更容易,因为你已经在使用jQuery,添加一个.hidden类来隐藏起初。
  8. 一些分号丢失了 - 不是一件大事,但为什么强迫解析器插入它们。
  9. 您可以克隆节点并在其他位置显示其内容。
  10. img src=奇怪的引用,使用单引号
  11. 我还使用变量r来使代码更易于阅读

    &#13;
    &#13;
    $.ajax({
      url: 'https://randomuser.me/api/?results=5000',
      dataType: 'json',
      success: function(data) {
        let html = "";
        html += "<ul>";
        var i=0;
        for (i=0; i < 12; i++) {
          let r = data.results[i];
          html += "<li>";
          html += "<img src='" + r.picture.medium + "'>";
          html += "<div class='main'>";
          html += "<h3>" + r.name.first + " " + r.name.last + "</h3>";
          html += "<p>" + r.email + "</p>";
          html += "<p>" + r.location.city + "</p>";
          html += "<p class='popup'>" + r.phone + "</p>";
          html += "<p class='popup'>" + r.location.street + ", " + r.location.state + " " + r.location.postcode + "</p>";
          html += "<p class='popup'>" + r.dob + "</p>";
          html += "</div>";
          html += "</li>";
        }
        html += "</ul>";
        $("#employeeList").html(html);
      }
    });
    $("#employeeList").on("click", "li", function(event) {
       var myclone = $(this).clone();
       $(".modal").html(myclone);
       // seems less than useful?  event.preventDefault();
       $(".overlay").show(); // put last to avoid "flash" on insertion of content
    })
    $(".overlay").on("click", function() {
       $(this).hide();
    });
    &#13;
    .hidden{display:none;}
    * {
      list-style-type: none;
      text-decoration: none;
    }
       
    
    body,
    html {
      background-color: #eff2f5;
      margin: 0;
    }
    
    ul {
      display: flex;
      flex-wrap: wrap;
      flex: 1;
      margin-right: 25px;
    }
    
    .popup {
      display: none;
    }
    
    li img {
      width: 110px;
      height: 110px;
      border-radius: 50%;
      margin-right: 15px;
      margin-left: 10px;
      margin-top: 10px;
      margin-bottom: 10px;
    }
    
    li {
      flex: 1;
      display: flex;
      flex-direction: row;
      justify-content: center;
      background-color: white;
      border-radius: 5px;
      margin: 12px;
      border: 2px lightgray solid;
      min-width: 400px;
    }
    
    li:hover {
      cursor: pointer;
    }
    
    .overlay {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      z-index: 10;
      background-color: rgba(0, 0, 0, 0.5);
      display: none;
    }
    
    p {
      color: gray;
      margin: 5px;
      margin-left: 0;
    }
    
    #main {
      margin-bottom: 10px;
    }
    
    h3 {
      margin-bottom: 0;
    }
    
    .modal {
      background-color: grey;
      z-index: 20;
      position: absolute;
      top: 40%;
    }
    &#13;
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.25/jquery.fancybox.min.css">
    <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.1.25/jquery.fancybox.min.js"></script>
    <div class="overlay hidden">
      <div class="modal"></div>
    </div>
    <h1>Awesome Startup Employee Directory</h1>
    <div id="employeeList"></div>
    &#13;
    &#13;
    &#13;