我试图实现一种行为,在按钮点击后,我的叠加div在整个页面上都可见。我试图将jquery语法与.show()
/ .hide()
和getElementById
函数一起使用,但无法完成。下面的代码输出"第一状态:块"和"第二个州:没有",虽然它应该是"第二个州:块"并且div根本不可见。这样做的正确方法是什么?
$(document).ready(function() {
document.getElementById("save-button").addEventListener('click', function() {
// $("#overlay").show();
document.getElementById("overlay").style.display = 'block';
var state = document.getElementById("overlay").style.display;
console.log("1st state: " + state);
$.ajax({
type: "POST",
url: "/myUrl?arg1=$(arg1)&arg2=$(arg2)",
data: {arg1: arg1, arg2: arg2},
success: function (response) {
var state = document.getElementById("overlay").style.display;
console.log("2nd state: " + state);
// $("#overlay").hide();
document.getElementById("overlay").style.display = 'none';
},
error: (resp) => {
// $("#overlay").hide();
document.getElementById("overlay").style.display = 'none';
}
});
// $("#overlay").hide();
document.getElementById("overlay").style.display = 'none';
}, false);
})
HTML:
<div id="overlay" class="overlay"></div>
<button id="save-button">Save</button>
的CSS:
.overlay {
background-color: rgba(0, 0, 0, 0.6);
z-index: 999;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
display: none;
padding: 0;
margin: 0;
}
答案 0 :(得分:3)
这是因为document.getElementById("overlay").style.display = 'none';
来电后$.ajax
来电(第22~23行)。 ajax方法是异步的,会立即返回,导致叠加层被直接隐藏。
您应该只在$.ajax
回调中隐藏叠加层。
删除该行,你应该没问题:
$(function() {
var overlay = $("#overlay");
$("#save-button").on("click", function() {
overlay.show();
$.ajax({
type: "POST",
url: "/myUrl",
data: {
arg1: arg1,
arg2: arg2
},
success: function(response) {
overlay.hide();
},
error: function(response) {
overlay.hide();
}
});
});
})
此外,如果您正在使用POST请求,为什么还要将数据作为GET参数传递?另外,你的代码风格很奇怪(有时是function
,有时是箭头等),我建议你使用linter来保持一致。