話說曾在校時,前端的第一門課程HTML靜態網頁設計,其老師,真是應了他的名字: 路遙知馬力。 整個學期硬是全部在 Dreamwear 中進行拖拽控件來教學,未曾教授一句代碼。成功忽悠了全體學生,課上一本正經的胡說八道,對拖拽控件的心得侃侃而談,想想也是諷刺,同期的學生都是純手寫編輯界面,我們卻依舊沉浸在設計下的拖拽操作中,帶來的就是界面看起來還像回事,只是源碼慘不忍睹,后來有幸在網上觀看了燕十八老師的HTML系列視頻,猶如冬服參湯,醍醐灌頂。使我終沒有在拖拽的路上越走越遠。
1.前台界面互調傳值,就是子界面與父界面之間的那些事
①父界面傳值到子界面 在子界面中使用opener方法來說獲取父界面元素
<script type="text/javascript"> function getfather() { var a = window.opener.document.getElementById("txt1").value; var b = window.opener.document.getElementById("txt2").value; console.log(a); console.log(b); } </script>
如上圖所示,txt1、txt2 為父界面中兩個textbox 的 ID 屬性值,這樣就可以直接接受值,純前台界面之間的操作
②子界面傳值到父界面,同樣可以在子界面中用 opener 來解決,同上,只是給等號右邊的表達式賦值而已。當然,方法有很多種,解決問題時只需要一種,對於初學者,其他的方法了解就可,需要先是廣度,深度的事情,研究起來內容很多,需要下大量的功夫,時間也是等倍計算。當然我這里不是誤導,時時刻刻積累,每天睡前想想 又 get 到哪些新技能。
本着技術不夠,數量來湊的思想來說說Web from 中前后台的控件的情況
2. 函數執行順序,對於一般按鈕而言,可以設置 OnClick、OnClientClick、OnCommand事件,執行順序如下:
①OnClientClick 調用JS中設置的方法
②OnClick 按鈕單擊事件,在OnClientClick 事件之后執行
③OnCommand 在OnClick 事件執行,一般是結合CommandName 屬性一起使用,當界面上有多數按鈕時,可以進行標記
3. 前台方法中設置判斷,是否執行 OnClick 事件
<script type="text/javascript"> function Todu() { var txtbd = document.getElementById("txtbd").value; if(parseInt(txtbd)!=2) { alert("回答錯誤,無法進行進入後台"); return false; //添加此處 } else { alert("我將要執行後台方法"); } } </script>
默認情況下,OnClientClick 事件執行完,是要執行 OnClick 事件的,在前台做判斷時, 需要設置兩個地方,其一是在方法中添加,如上圖注釋處,其二如下圖,在OnClientClick 事件中加入 return false();
<body> <form id="form1" runat="server"> <div> <asp:Label ID="lab" runat="server"></asp:Label> <br /> <asp:TextBox ID="txtbd" runat="server"></asp:TextBox> <asp:Button ID="btn_to" runat="server" Text="ToBaidu" OnClick="btn_to_Click" OnClientClick="Todu(); return false();"/> </div> </form> </body>
4.后台調用前台方法
① 在Page_load 里面給某個按鈕綁定前台方法 (注:和前端調用略有不同,false 后面沒有括號)
protected void Page_Load(object sender, EventArgs e) { btn_to.Attributes.Add("onclick", "javascript:return Todu(); return false;"); }
② 在某個按鈕事件或方法中 綁定前台方法
protected void btn_id_Click(object sender, EventArgs e) { //在前台腳本裡面增加一個script: window.open('B.aspx'); this.ClientScript.RegisterStartupScript(this.GetType(), "", "window.open('B.aspx')", true); //在前台腳本裡面增加一個script: icc(); 注:沒有true this.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>icc();</script>"); //在前台腳本裡面增加一份script: alert("123"); 注:單/雙引號 Response.Write("<script type='text/javascript'>alert('123');</script> "); }
5. 前台調用后台方法
public int After() { return 233; } public int After2(int a, int b) { return a + b; }
比如后台有以上兩個方法,一個帶參數,一個不帶參數,那么在前台的方法中,若調用后台方法,如下:
function iafter() { var b = "<%=After()%>"; alert(b); } function iafter2() { var b = "<%=After2(5,8)%>"; alter(b); }
以上這些都是很淺顯的點,不管怎樣,也是記錄我這個小白路上的一個腳印,權當作學習筆記。
----------------------------------市人皆大笑,舉手揶揄之