页面回传的JavaScript事件

19

有没有在回发时触发的JavaScript事件?

如果没有,我该如何在页面回发之后或之前立即运行客户端代码?


1
+1 欢迎来到 Stack Overflow,Bruno。 - Sampson
7个回答

5
请看: 在Postback之后运行javascript函数 我使用以下方法解决了我的问题:
<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(function (s, e) {
        alert('Postback!');
    });
</script>

还有很多选择,例如:

$('#id').live('change', function (){});

$(document).ready(function () {});
ClientScriptManager.RegisterStartupScript(this.GetType(), "AKey", "MyFunction();", true);

继续前进。取决于你的需求。

PageRequestManager事件:https://learn.microsoft.com/en-us/previous-versions/aspnet/bb398976(v=vs.100)


5
我相信你正在寻找的是 Sys.WebForms.PageRequestManager beginRequest 事件
摘录:
beginRequest 事件在异步回发处理开始和回发发送到服务器之前被触发。您可以使用此事件调用自定义脚本来设置请求头或启动动画,以通知用户回发正在处理中。
代码示例:(来自链接)
<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function BeginRequestHandler(sender, args)
    {
        var elem = args.get_postBackElement();
        ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing...');
    }
    function EndRequestHandler(sender, args)
    {
        ActivateAlertDiv('hidden', 'AlertDiv', '');
    }
    function ActivateAlertDiv(visstring, elem, msg)
    {
        var adiv = $get(elem);
        adiv.style.visibility = visstring;
        adiv.innerHTML = msg;                     
    }
</script>

我希望这能有所帮助。 PageRequestManager 类似乎鲜为人知且被少用。

4
您可以在页面加载时添加JavaScript,方法如下...
Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", 
    "alert('hello world');", true);

或者

Page.ClientScript.RegisterStartupScript(this.GetType(), "alertScript",
   "function Hello() { alert('hello world'); }", true);

3

Page.ClientScript对象有一个RegisterOnSubmitStatement,它会在任何输入提交表单后触发。这可能是您正在寻找的,也可能不是,但我已经用它来通知用户可编辑表单中未保存的更改。

使用此方法的优点是,与RegisterStartupScript相比,如果用户使用浏览器导航离开并返回,使用RegisterStartupScript注入的任何脚本都可能再次触发,而RegisterOnSubmitStatement仅在用户提交表单时运行。


1

表单标签上的onsubmit事件

在使用jQuery时,它是这样的

$("#yourformtagid").submit(function () {
 ...
}

JQuery?不确定原帖作者是否想要使用完整的框架来完成任务 ;) - Patrick Desjardins
2
但是为了以防万一,每个网站都应该有jQuery :-) - TFD
1
jQuery的提交事件在WebForms回发之前不会被触发。 - Brett

1

在页面回发后没有触发JavaScript事件,但是您可以将JavaScript添加到HTML模板(.aspx文件)中,仅在页面被提交时运行它,例如:

<script type='text/javascript'>
    var isPostBack = '<%= this.IsPostBack%>' == 'True';
    if (isPostBack) {
        alert('It's a PostBack!');
    }
</script>

如果您想要自定义 JavaScript 仅在特定条件下运行(而不是任何 postback),您可以在页面类中创建一个页面级变量(受保护或公共),并执行类似以下的操作:
var userClickedSubmit = '<%= this.UserClickedSubmit%>' == 'True';
if (userClickedSubmit) {
    // Do something in javascript
}

(没有反对 ClientScript.RegisterStartupScript,这是可以的 - 有时您想将 JavaScript 保留在页面模板中,有时您想将其保留在页面类中。)


这个答案是其他答案方法的有用补充。 - Roland

1
使用 AJAX,并为 onComplete 添加事件处理程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接