1. 程式人生 > >利用js實現popup彈窗

利用js實現popup彈窗

settings element type 路由 數據庫 點擊 ack get 事件

簡單實現一個通過一個網頁,點擊生成一個彈窗,然後點擊保存之後自動關閉彈窗的功能。

首先在settings文件中寫上兩條對應的路由關系。

1 urlpatterns = [
2     url(r^p1/, p1),
3     url(r^p2/, p2),
4 ]

我們可以肯定的是我們需要一個網頁,然後彈出另一個網頁,所以我們還需要兩個視圖函數。

1 def p1(request):
2     return render(request,p1.html)

如上代碼,我們先寫一個視圖函數,緊接著我們配一個對應的p1.html文件:

 1 <!DOCTYPE html
> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 7 </head> 8 <body> 9 <h1>p1頁面</h1> 10 <select id="i1"> 11 <option>上海</option> 12 <option>北京</option
> 13 </select> 14 <input type="button" value="添加" onclick="popupFunc();" /> 15 16 <script> 17 function popupFunc() { 18 window.open(/p2/,asdfadf,"status=1, height:500, width:600, toolbar=0, resizeable=0") 19 } 20 21 function backFunc(name) {
22 var op = document.createElement(option); 23 op.innerHTML = name; 24 op.setAttribute(selected,selected); 25 document.getElementById(i1).appendChild(op); 26 } 27 </script> 28 29 </body> 30 </html>

現在我解釋一下上面的html代碼,首先我創建一個select標簽,id為i1;然後創建一個button按鈕,綁定了一個popupFunc的事件。

接著script代碼就是,觸發的popupFunc()函數,

然後通過window.open打開一個新的窗口,參數第一個是要跳轉的url,第二個參數可以寫一個url別名,避免多個的時候會有混淆,接著就可以配置樣式了。

再後面backFunc(name)函數是當新彈出的窗口提交數據並關閉之後,本窗口接收數據之後做的操作,新建一個option,賦值,添加到select中,結束。

接下來我們配置新窗口的視圖函數。

1 def p2(request):
2     if request.method == "GET": #獲取頁面的GET請求
3         return render(request,p2.html) #返回p2.html
4     elif request.method == "POST":
5         # 提交數據的POST請求,在數據庫中增加
6         from app01 import models
7         obj = models.UserGroup.objects.create(title=request.POST.get(city))  #出電腦數據庫的一格UserGroup表中。
8         return render(request,popup_response.html,{obj:obj}) #最後跳轉到一個新的頁面,並傳參。

然後創建p2.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6    
 7 </head>
 8 <body>
 9     <form method="POST">
10         {% csrf_token %}
11         <input type="text" name="city" />
12         <input type="submit" value="提交" />
13     </form>
14 </body>
15 </html>

一個Input框 輸入內容,一個提交按鈕通過views提交數據庫,並傳參給另一個頁面。註意POST請求需要{% csrf_token %}

最後我們接下來創建那個popup_response.html頁面

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>正在返回</title>
 6 
 7 </head>
 8 <body>
 9 <script>
10     (function () {
11         var name = "{{ obj.title }}";
12         window.opener.backFunc(name);
13         window.close();
14     })()
15 </script>
16 </body>
17 </html>

該頁面實際上顯示一瞬間就關閉了,具體邏輯就是,當p2.html提交之後,數據存到數據庫,然後跳轉到這個頁面,

這個頁面寫了一個匿名函數,該函數只要頁面一被渲染將自動執行,這個頁面定義了一個變量name,

然後將這個name 傳給opener的backFunc()函數,之後緊接著執行了window.close(),關閉了頁面。

寫這個頁面的目的一個是用戶操作友好一點,第二就是將obj.title傳給了先前的網頁,讓先前的p1網頁可以繼續操作數據,創建option

如上,這就是簡單的popup彈窗的使用方法。

利用js實現popup彈窗