1

我的主网页包含 JS 代码以使用自定义 jQuery 对话框覆盖标准警报。

<script type="text/javascript" language="javascript">
        window.alert=function(alertMessage)
        {
          $.msgbox(alertMessage, {type: "info"});  
         }             
</script>

在 default.aspx 网页 onLoad 方法中,我正在尝试注册并显示警报脚本

 Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword",
                "alert(\"Your login attempt was not successful. Please try again.\");",
                true);

不幸的是,它不起作用。如果我删除覆盖警报框的 JS 代码一切正常,则会出现警报框。覆盖 JS 是正确的,如果我在客户端执行警报 js,它工作正常,但如果我尝试从服务器端执行代码,它就不起作用。

谁能解释问题出在哪里?

4

2 回答 2

3

当我尝试从 aspx 页面的 page_load 事件运行它时,我遇到了同样的问题,但是当我从 body onload 事件运行它时,它可以工作。我认为这是因为 page_load 事件发生在您的 window.alert 覆盖有机会运行之前。

在 body 标签中试试这个:

<body onload="alert('Your login attempt was not successful. Please try again.');">  

和 jQuery:

$(function () {

        window.alert = function (message) {
            $('#dialog').text(message).dialog();
        }

 });

顺便说一句,我使用了 jQuery UI 对话框插件。

于 2010-09-10T12:57:39.773 回答
0

好的,我发现问题出在哪里。如果注册到 RegisterClientScriptBlock 的代码引用了另一个 JS 代码,那么我们需要完整加载网页。似乎注册在 RegisterClientScriptBlock 中的 JS 在加载到浏览器时立即执行,无论网页是否完全加载。所以我们需要在网页完全加载后执行代码。我们可以使用下面的jQuery事件来找到它

  $(document).ready(function() {



  });

完整的代码看起来像

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword",
                    "$(document).ready(function() {alert(\"Your login attempt was not successful. Please try again.\");})",
                    true);
于 2010-09-10T12:58:41.720 回答