javascript - 需要在 OnClientClick 之前执行 OnClick 事件
问题描述
我正在开发一个扫描应用程序,我需要进行一些验证和数据库更新,然后扫描文档。
我已经尝试了各种基于搜索答案但无法找到任何东西的方法。
<asp:ScriptManager ID="script1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
<asp:UpdatePanel ID="panel1" runat="server">
<ContentTemplate>
<tr><td><asp:Button ID="btnScan" runat="server" Text="Scan" OnClick="Scan" OnClientClick="return AcquireImage()" /><p></td></tr>
</ContentTemplate>
</asp:UpdatePanel>
</table>
</td>
<td>
<table width=100% >
<tr><td>
<div id="dwtcontrolContainer" > </div>
</td></tr>
</table>
<script type="text/javascript">
function AcquireImage() {
var DWObject = Dynamsoft.WebTwainEnv.GetWebTwain('dwtcontrolContainer');
DWObject.IfDisableSourceAfterAcquire = 'true';
DWObject.SelectSource();
DWObject.OpenSource();
DWObject.AcquireImage();
// var isPostBack = <%=Convert.ToString(Page.IsPostBack).ToLower()%>;
// alert(isPostBack);
return true;
}
甚至尝试删除 OnClientClick 并通过 onClick 事件执行 javascript。它进入 Onclick 但不会执行 javascript
if (enddate.Text == "")
{
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key", "alert('Please enter a Transaction date before scanning');", true);
return;
}
//ScriptManager.RegisterStartupScript(this, this.GetType(), "myScript", "AcquireImage()", false);
Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMAnotherFunction", "javascript:AcquireImage();", true);
任何帮助将不胜感激。
解决方案
OnClientClick事件在客户端运行,OnClick事件在服务器端运行。OnClientClick首先触发,因此不可能在OnClientClick之前执行OnClick事件。
根据您的要求,您需要先运行服务器端代码,然后运行客户端回调。这是我的解决方案。
<%@ Page Language="C#" %>
<!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 id="head1" runat="server">
<title>Button.OnClientClick Example</title>
<script type="text/javascript" src="http://tst.dynamsoft.com/libs/dwt/14.0/dynamsoft.webtwain.min.js"> </script>
</head>
<body>
<script runat="server">
void Button1_Click(object sender, EventArgs e)
{
string script = @"
var DWObject = Dynamsoft.WebTwainEnv.GetWebTwain('dwtcontrolContainer');
DWObject.IfDisableSourceAfterAcquire = true;
var bSelected = DWObject.SelectSource();
if(bSelected) {
var OnAcquireImageSuccess, OnAcquireImageFailure;
OnAcquireImageSuccess = OnAcquireImageFailure = function () {
DWObject.CloseSource();
};
};
DWObject.OpenSource();
DWObject.AcquireImage(OnAcquireImageSuccess, OnAcquireImageFailure);
";
bool isTrue = true;
if (isTrue)
{
ScriptManager.RegisterClientScriptBlock(this, GetType(), "key", script, true);
}
}
</script>
<form id="form1" runat="server">
<h3>Dynamsoft Dynamic Web TWAIN Demo</h3>
<p></p>
<div id="dwtcontrolContainer"></div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" CausesValidation="False" OnClick="Button1_Click" Text="Scan Documents" UseSubmitBehavior="False" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
注意:为了使动态 Web TWAIN 代码工作,需要ScriptManager和UpdatePanel(AJAX 扩展)。
推荐阅读
- java - Scala - 如何将回调传递给方法
- python - Pandas 仅选择 idxmin+1(倒数第 n 个)值
- angularjs - symfony webpack 再来一次 angularJS
- amazon-web-services - 在同一个 Ec2 实例上运行 Splash 服务器和 Scrapy 蜘蛛
- javascript - 如何对齐html?
- java - Java - 将文本文件作为整数读取并将每一行拆分为数组
- excel - Countifs 函数帮助 Excel
- javascript - 原型继承:Object.create vs Object.assign
- php - 如何自定义 Wordpress 主题的到期日期
- oop - Fortran 中的继承和指针