asp.net 2.0 / jQuery / AJAX script type="text/javascript"//updated to show proper method signaturevar prm = Sys.WebForms.PageRequestManager.getInstance();prm.add_endRequest(hideMessage);function hideMessage(sender, args){ var ctl = args.get
<script type="text/javascript"> //updated to show proper method signature var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_endRequest(hideMessage); function hideMessage(sender, args) { var ctl = args.get_postBackElement(); //check if ctl is the disired control //hide user notification message } </script>
我在页面上有几个可能启动AJAX请求的控件,但我只想在点击一个特定按钮时触发我的js.我如何检查启动请求的控件,以便我可以相应地触发JS.
编辑:我解决了这个问题,但我仍然想知道我是否可以这样做.
澄清:我无法从onclick事件中调用JS,因为该页面位于UpdatePanel内部,我只希望JS在AJAX请求结束时执行,并且它是由页面上的一个特定按钮触发的.在服务器端,我将myLabel.Text设置为某些文本,然后js检查$(myLabel.CliendID)的innerHTML是否为空并触发js.检查innerHTML是我的解决办法,因为我无法弄清楚如何检查AJAX请求的“发送者”.希望现在这更有意义.
edit2:我已经阅读了一些documentation,结果你可以检查“发送者”控件.
谢谢.
这就是我在代码中所做的工作,以确定哪个控件初始化了请求.所有的JavaScript代码.function pageLoad() { if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) { Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(initializeRequest); } } function endRequestHandler(sender, args) { if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>') { //do something because of this... } } function initializeRequest(sender, args) { if (CheckForSessionTimeout()) { args.set_cancel(true); } else { if (sender._postBackSettings.sourceElement.id == '<%= gvResults.ClientID %>') { //do something because of this } } }
EDITHere是在客户端检查超时的方法.
var sessionTimeoutDateTime = new Date(); var sessionTimeoutInterval = <%= this.SesstionTimeoutMinutes %>; function CheckForSessionTimeout() { var currentDateTime = new Date() var iMiliSeconds = (currentDateTime - sessionTimeoutDateTime); if (iMiliSeconds >= sessionTimeoutInterval) { ShowSessionTimeout(); return true; } return false; }