我需要完成的效果:
1.在頂級頁面打開模態框,並且遮罩層也要再頂級頁面
2.單擊遮罩層部分,模態框不關閉
問題描述:
不知為什么,可能是bootstrap前端框架添加遮罩層的一些問題。通過子頁面在頂級頁面打開模態框(modal),遮罩層竟然只在子頁面顯示。
如下效果:
1.主頁面代碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" href="css/bootstrap.css" /> </head> <body> <table width="100%" height="720px" border="1" > <tr> <td> <iframe id="iframe1" name="iframe1" src="iframe1.html" width="100%" height="100%"></iframe> </td> <td></td> </tr> <tr> <td></td> <td> <iframe name="iframe2" src="iframe2.html" width="100%" height="100%"></iframe> </td> </tr> </table> <input type="text" id="textId" value="234" /> <script type="text/javascript" src="js/jquery.js" ></script> <script type="text/javascript" src="js/bootstrap.js" ></script> </body> </html>
2.子頁面代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="css/bootstrap.css" /> </head> <body> <div > <font color="#000000" size="4"> 聽一場搖滾,和耳朵一起一醉方休;<br /> 喝一圈烈酒,讓酒膩子們聞風喪膽;<br /> 開一場cosplay party,二次元萬歲;<br /> 摸一下大蜥蜴,我熊膽威風凌厲;<br /> 吃三斤驢打滾,翻滾吧腸胃;<br /> 飈一把摩托車,成為風馳電掣的女王;<br /> 見一下微博紅人,感受馬伯庸親王的慈祥; </font> </div> <script type="text/javascript" src="js/jquery.js" ></script> <script type="text/javascript" src="js/bootstrap.js" ></script> <script type="text/javascript"> $(document).ready(function() { openModal(); }); //打開模態框 function openModal(){ var fatherBody = $(window.top.document.body); var id = 'pages'; var dialog = $('#' + id); if (dialog.length == 0) { dialog = $('<div class="modal fade" role="dialog" id="' + id + '"/>'); dialog.appendTo(fatherBody); } dialog.load("model.html", function() { dialog.modal(); }); } </script> </body> </html>
注:window.top獲取頂級頁面的window對象
問題在於遮罩層,渲染完后查看遮罩層代碼如下:"<div id='backdropId' class='modal-backdrop fade in'></div>"
1.子頁面修改代碼如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="css/bootstrap.css" /> </head> <body> <div > <font color="#000000" size="4"> 聽一場搖滾,和耳朵一起一醉方休;<br /> 喝一圈烈酒,讓酒膩子們聞風喪膽;<br /> 開一場cosplay party,二次元萬歲;<br /> 摸一下大蜥蜴,我熊膽威風凌厲;<br /> 吃三斤驢打滾,翻滾吧腸胃;<br /> 飈一把摩托車,成為風馳電掣的女王;<br /> 見一下微博紅人,感受馬伯庸親王的慈祥; </font> </div> <script type="text/javascript" src="js/jquery.js" ></script> <script type="text/javascript" src="js/bootstrap.js" ></script> <script type="text/javascript"> $(document).ready(function() { openModal(); closeModal(); }); //打開模態框 function openModal(){ var fatherBody = $(window.top.document.body); var id = 'pages'; var dialog = $('#' + id); if (dialog.length == 0) { dialog = $('<div class="modal fade" role="dialog" id="' + id + '"/>'); dialog.appendTo(fatherBody); } dialog.load("model.html", function() { dialog.modal({ backdrop: false }); }); fatherBody.append("<div id='backdropId' class='modal-backdrop fade in'></div>"); } //關閉模態框 function closeModal(){ var fatherBody = $(window.top.document.body); fatherBody.find("#pages").on('hidden.bs.modal', function (e) { fatherBody.find("#backdropId").remove(); }); } </script> </body> </html>
主要方面:
1.openModal(),closeModal()兩個方法,在子頁面綁定的關系頂級頁面模態框的打開和關閉方法。openModal方法在頂級頁面添加的遮罩層的html代碼,而closeModal給頂級頁面的模態框對象綁定了'hidden.bs.modal'事件,在該事件中移除的遮罩層
的html代碼。
2. dialog.load("model.html", function() {
dialog.modal({
backdrop: false
});
});中的backdrop:false實現了再遮罩層點擊不再關閉模態框的功能!
修改后的效果:
個人試過其他的很多方式,最終這是最簡單最方便的!如果有人想去看bootstrap的代碼去修改,個人十分佩服,但由於個人工作問題只能淺嘗輒止。
項目源碼下載地址:http://pan.baidu.com/s/1qWTm4e4
參考網站地址:http://bootstrap.evget.com/javascript.html#modals