我是编程的初学者。我一直在寻找答案,但我找到的所有答案都没有解决我的问题。我使用了问题中解释的how do I center javascript css popup div, no matter what the screen resolution?弹出式div方法。
是否可以通过点击外部来关闭div,只需对以下代码进行少量更改?
<script type="text/javascript">
function showPopUp(el) {
var cvr = document.getElementById("cover")
var dlg = document.getElementById(el)
cvr.style.display = "block"
dlg.style.display = "block"
if (document.body.style.overflow = "scroll") {
cvr.style.width = "1024"
cvr.style.height = "100%"
}
}
function closePopUp(el) {
var cvr = document.getElementById("cover")
var dlg = document.getElementById(el)
cvr.style.display = "none"
dlg.style.display = "none"
document.body.style.overflowY = "scroll"
}
</script>
<style type="text/css">
#cover {
display: none;
position: fixed;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
background: gray;
filter: alpha(Opacity = 50);
opacity: 0.5;
-moz-opacity: 0.5;
-khtml-opacity: 0.5
}
</style>
在HTML格式中,我使用ids dialog1
,dialog2
等隐藏了div的数量。点击链接时,div会显示并关闭它,我会使用img
链接:
< a class="close" href="#2" onclick="closePopUp('dialog2');">< img src="/img/close.png" height="30px"></a >
答案 0 :(得分:9)
当您打开弹出窗口时,创建一个高度宽度为100%的不可见div,它位于弹出窗口的后面。
将一个onclick函数附加到div:
document.getElementById('invisibleDiv').onclick = function()
{
document.getElementById('popup').style.display = 'none';
}
希望有所帮助
答案 1 :(得分:1)
var $popup = $('#your-popup');
$('body').on('click', function(ev) {
$popup.hide(); // click anywhere to hide the popup; all click events will bubble up to the body if not prevented
});
$popup.on('click', function(ev) {
ev.stopPropagation(); // prevent event from bubbling up to the body and closing the popup
});
答案 2 :(得分:0)
不使用javascript创建一个不可见的div:
添加:
function getOffset(el) {
var _x = 0;
var _y = 0;
while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
_x += el.offsetLeft - el.scrollLeft;
_y += el.offsetTop - el.scrollTop;
el = el.offsetParent;
}
return { top: _y, left: _x };
}
// function to check intersection rectangle <-> point
function intersects(ax1, ay1, ax2, ay2, px, py) {
return !(ax2 < px || ax1 > px || ay2 < py || ay1 > py);
}
document.onclick = function(event) {
var dialog = document.getElementById('dialog');
var offset = getOffset(dialog);
var ax1 = offset.left;
var ay1 = offset.top;
var ax2 = ax1 + 300 /* dialog width */;
var ay2 = ay1 + 300 /* dialog height */;
if(!intersects(ax1, ay1, ax2, ay2, event.pageX, event.pageY)) {
closePopUp('dialog');
}
};
答案 3 :(得分:0)
是...重要您在使用<div class="ui-widget-overlay ui-front"></div>
时删除了叠加层,Jquery 2.0.0.js
...(可能是以前的库更改了名称)
示例...
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.0.0.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<link href="http://code.jquery.com/ui/1.10.2/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<script type="text/javascript">
// <---- VENTAÑAS DE PARAMETERES---->
$(document).ready(function() {
$( "#wnd_Paramedit" ).dialog({
autoOpen: false,
height: 'auto',
width: 405,
modal: true,
resizable:false,
buttons: {
"Accept": function() {
$( this ).dialog( "close" );
},
Cancel: function() {
$( this ).dialog( "close" );
}
},
close: function() {
$( this ).dialog( "close" );
}
});
$( "#btn_Pedit" ).click(function() {
$( "#wnd_Paramedit" ).dialog( "open" );
$("div").removeClass("ui-widget-overlay ui-front");
});
});
</script>
<body>
<h3>List of parameters</h3>
<div id="sortparam" >
</div>
<input type="button" id="btn_Pedit" value="Edit"/>
<div id="wnd_EditParam" title="Edit Parameter"></div>
</body>
<div id="wnd_Paramedit" title="Choose parameter" >
<label> inserta el nombre del Parameter que quiere modificar<label><br />
<label> ID <input type=text size=30 id="med"></label>
</div>
</html>
现在您可以创建另一个特定按钮以关闭弹出窗口,然后粘贴此特定代码以进行关闭:
$( "#wnd_Paramedit" ).dialog("close");
或
$( "#wnd_Paramedit" ).dialog("destroy");