为扩展按钮控件注册 onsubmit 语句时出现问题
题
嗨,我最近爱上了一个 扩展上传按钮控制 我发现 这里 当与 aspnet 文件上传控件一起使用时,可以以类似 gmail 的方式执行上传。唯一的问题是当控件放置在页面上时 该页面上的任何按钮都会触发扩展控件的单击事件。
在查看源代码之前我不知道为什么会发生这种情况。
/// Basic registration of events
protected override void OnInit(EventArgs e)
{
this.Page.LoadComplete += new EventHandler(Page_LoadComplete);
base.OnInit(e);
this.Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "ScriptBlock", this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "WebControls.JScripts.AIMScript.js"));
string cid = this.ClientID;
string onsubmitstatement = "return AIM.submit( document.forms[0], {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})";
this.Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "OnSubmitScript", onsubmitstatement);
}
据我所知,问题在于注册的控件 'onsubmit语句'对于页面上的所有控件 '文档.forms[0]'. 。现在我在编写自定义控件方面的经验非常有限,因此我为上传控件注册“onsubmitstatement”的所有努力都失败了,例如
string ctrlid = this.ClientID
string onsubmitstatement = "return AIM.submit( document.getElementById('" + ctrlid + "'), {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})";
谁能帮我?有没有办法 仅为此控件注册 onsubmit 函数?
解决方案
我们需要知道 AIMScript.js 到底在做什么才能真正回答这个问题。
但基本思想是,您需要更改 javascript,以便它在特定按钮的单击事件上执行操作,而不是拦截整个表单的提交事件。但这个特定的 javascript 也可能以其他方式依赖于表单元素。
它可以像更改注册一样简单,只注册一个 javascript DoClick 函数,如下所示:
string onsubmitstatement = "function DoClick() {return AIM.submit( document.forms[0], {'onStart' : " + OnStartScript + ", 'onComplete' : " + OnCompleteScript + "})}";
this.Page.ClientScript. RegisterClientScriptBlock(this.GetType(), "OnSubmitScript", onsubmitstatement);
然后在实际的按钮控件上,将其连接起来以调用您在上面注册的新 DoClick() javascript 函数——如下所示:
<input type="button" value="ClickMe" onclick="DoClick()" />
不隶属于 StackOverflow