您的位置:首页 > Web前端 > JavaScript

AttachJSFunction(一个button同时挂两个onclick事件)

2006-09-28 16:19 399 查看
不只一次遇到过这样的问题:一个button要执行了两次不同的onclick事件,所谓不同就是一个button的onclick分别挂了两个不同的function,比如经常会有这样的情况:先弹出一个confirm对话框,然后再执行其它的操作。
  也许你会说,那很简单,把两个function里的内容拼到一起不就ok了吗?
  可是,如果一个function在server端,而另一个在client端,那么想把它们拼凑到一起是一件很困难的事情。
  困难,即不是不能实现,下面是percyboy从微软的程序中摘出一段代码写成了一个function AttachFunction(ev, func),解决了上述的难题!

  以下是所有测试该问题的代码
  AttachJSFunction.aspx 代码: 

<%@ Page language="c#" Codebehind="AttachJSFunction.aspx.cs" AutoEventWireup="false" Inherits="site1.AttachJSFunction" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>AttachJSFunction</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<script language="JavaScript">
<!--
function init()
{
var mybtn = document.all("Button1");

//**************************************
//mybtn.onclick = Button1_click;
/// *--invoke ordinary.
/// *--it is only execute one function.
//**************************************

//****************************************************************
mybtn.onclick = AttachFunction(mybtn.onclick, "Button1_click()");
/// *--warning: [Button1_click] is wrong.
/// *-- ["Button1_click()"] is right.
//****************************************************************

//****************************************************************
//alert(mybtn.onclick);
/// *--alert output:
/// function anonymous() {
///
/// if(!confirm('Are you sure submit?')) return false;
/// Button1_click() //-- have no ';'
/// }
//****************************************************************
}
function Button1_click()
{
var mytextbox = document.all("TextBox1");
mytextbox.value = "you already submit on (" + (new Date()).toLocaleString() + " ).";
}
function AttachFunction(ev, func)
{
if (typeof(ev) == "function" ) {
ev = ev.toString();
ev = ev.substring(ev.indexOf("{") + 1, ev.lastIndexOf("}"));
}
else
{
ev = "";
}

//************************************************************
//return new Function(func + ev);
return new Function(ev + func);
// *-- warning: can be swap the location of the two functions.
//************************************************************
}
//-->
</script>
</HEAD>
<body onload="init()">
<form id="Form1" method="post" runat="server">
<FONT face="MS UI Gothic">
<asp:TextBox id="TextBox1" runat="server" Width="312px"></asp:TextBox>   
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button></FONT>
</form>
</body>
</HTML>

  AttachJSFunction.asp.cs 代码: 

public class AttachJSFunction : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Button Button1;

private static string jsFormat = "if(!confirm('{0}')) return false;";
private static string Message01 = "Are you sure submit?"; // *--usually from XML file.

private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{
this.Button1.Attributes.Add("onclick", string.Format(jsFormat, Message01));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐