問題
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的字
沒有留言:
張貼留言