我的主网页包含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它工作正常,但如果我尝试从服务器端执行代码它不起作用。
有谁能解释问题出在哪里?
答案 0 :(得分:3)
当我尝试从aspx页面的page_load事件运行它时,我遇到了同样的问题,但是当我从body onload事件运行它时,它可以工作。我认为这是因为page_load事件发生在window.alert override有机会运行之前。
在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对话框插件。
答案 1 :(得分: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);