好的,所以我正在尝试为一些随机生成的人建立一个叠加层。这是一个我正在研究的项目,你可以通过一些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>
抱歉关于所有内容,但我被困住了。提前谢谢!!
答案 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)
你可能会改变一些事情。
i
id='main'
,产生无效的html,使用一个类.preventDefault();
正在阻止什么......但是应该使用该事件呢?我评论了它。html
宣告成功?this
.show()
和.hide()
比使用css更容易,因为你已经在使用jQuery,添加一个.hidden
类来隐藏起初。img src=
奇怪的引用,使用单引号我还使用变量r
来使代码更易于阅读
$.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;