1. 程式人生 > >Bootstrap的模態框遮罩在iframe子頁面彈出時不能覆蓋父頁面的解決方法

Bootstrap的模態框遮罩在iframe子頁面彈出時不能覆蓋父頁面的解決方法

前段時間在做公司專案的後臺管理專案的時候,從網上下載了一個前端模板,是基於bootstrap的。之前也用過bootstrap的模態框,用的是Ace Admin的前端模板。也用了iframe,但並沒有遇到子頁面的模態框遮罩不能覆蓋父頁面的問題。這次既然遇到了,就小記一下,也許並不一定有用,但也希望能幫到各位。

我也是借鑑的網上資源自己修改出來的。之前一直把模態框寫在了子頁面中,幾經折騰後還是把模態框和模態框遮罩移到了iframe的父頁面中,以後iframe的子頁面需要彈出模態框的時候,直接呼叫這個模態框就可以了。呼叫模態框的同時,需要將遮罩也顯示出來。簡要程式碼如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" href="css/bootstrap.css" />
	</head>
	<body>
                <div>.....</div>
	        <!-- 統一呼叫的模態框  -->
	        <div class="modal fade" role="dialog" id="myModal" aria-hidden="true"></div>
	        <!-- 模態框遮罩 -->
	        <div id='backdropId' class='modal-backdrop fade in' style='display:none;'></div>
	</body>
</html>

此時,模態框的遮罩是隱藏的。然後就是iframe子頁面的按鈕點選觸發彈出模態框,同時讓模態框的遮罩顯示出來。以下是簡要的js程式碼,按鈕id為:chooseIndex

$(function() {	
	/*----------點選按鈕開啟模態框------------*/
	$("#chooseIndex").click(function(){
		var fatherBody = $(window.top.document.body);//找到父頁面的body物件
		var dialog = parent.$('#myModal');
		dialog.load("modal/leadDesktopModal.html", function() {
			dialog.modal({
			         backdrop: false
			});
		});
		//顯示模態框背景遮罩,遮罩位於index.html頁面
		fatherBody.find("#backdropId").show();
	});
});

需要注意的是,模態框的頁面需要單獨提出來寫成一個html頁面,然後再在直接呼叫這個模態框就可以了。然後是關閉模態框的同時也需要將模態框的遮罩一同隱藏掉。這個我也是幾經折騰後才選擇在模態框頁面加入隱藏遮罩的js程式碼,其他地方的時機都不對,不能有效關閉遮罩。一下是模態框頁面中的js程式碼:

$(function(){
	$(".closeModal").click(function(){
		var fatherBody = $(window.top.document.body);
		fatherBody.find("#backdropId").hide();//隱藏模態框遮罩
	});
});

以上!雖然程式碼貼的不是很完整,但主要的程式碼還是貼出來了,需要能對各位有所幫助。