Analytics

2010年6月8日 星期二

[Javascript]JavaScript自動觸發Server端Button(Server-side JavaScript automatically trigger Button)


問題
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的字

沒有留言:

熱門文章