問題
JavaScript自動觸發Server端Button
解決方法
程式流程是這樣的:
Server端將程式碼與html結合後,再將畫面傳送到Client端顯示,所以當Server的aspx頁面的PageLoad的時候,第一次執行,所以取得變數postback="clickbtn();"(這是執行在client端的Javascript Function),因此在結合程式與html的時候,透過<script><%=postback%></script> 傳值給Javascript(在此因為將之設為clickbtn();所以會觸發Javascript呼叫該Function)
.aspx如下:
<%@ Page Language="C#" AutoEventWireup="true" Codebehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>未命名頁面</title> </head> <script language="javascript"> function cilckbtn() { //取得並觸發按鍵動作 var btn=document.getElementById("Button1"); btn.click(); } </script> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></div> </form> <%--在頁面載入的時候去觸發javascript--%> <%--使用ispostback配合變數去是否執行過javascript--%> <script><%=postback%></script> </body> </html>.cs如下:
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
//若執行過則將變數改為空白,在頁面重新載入的時候,就不會觸發javascript postback = string.Empty;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
this.Label1.Text = "click button";
}
public string postback = "cilckbtn();";
}
}
瀏覽器後Label會被改掉!就是因為傳到Client端的時候,已經被觸發,導致再做一次postbak去變更Label的字
沒有留言:
張貼留言