JavaScript警告框无法正常工作

4

我有这段代码,试图在.NET平台上运行它,但是它无法工作。有没有人知道我的代码出了什么问题?谢谢。我使用的是Visual Studio 2010和C#编程语言。

private void AlertWithConfirmation()
            {
                Response.Write("<script language='javascript'>");
                Response.Write("var x=window.confirm(\"Are you sure you are ok?\")");
                Response.Write("if (x)");
                Response.Write("window.alert(\"Good!\")");
                Response.Write("else");
                Response.Write("window.alert(\"Too bad\")");
                Response.Write("</script>");
            }

一些通用事项:它是<script type="text/javascript">,你不必使用 window. 前缀全局函数,引号混乱是不好的,尽可能在双引号字符串内使用单引号。 - ThiefMaster
@dlev 我正在页面加载时测试它,但它不起作用,然而这将在执行了几个if语句后,在另一个方法的中间使用。谢谢。 - mikespiteri
你有收到任何脚本错误吗? - V4Vendetta
@V4Vendetta - 我没有收到任何脚本错误。 - mikespiteri
4个回答

3
您的代码会产生以下结果:
<script language='javascript'>var x=window.confirm("Are you sure you are ok?")if (x)window.alert("Good!")elsewindow.alert("Too bad")</script>

请注意,elsewindow标识符来自命令之间缺少分隔符,当然它不存在。这将导致错误,因为未定义的值没有alert方法。
一些改进:
  • 使用type属性而不是已弃用的language属性。
  • 在语句末尾使用分号。
  • 在代码块周围使用括号(例如在if之后)。
  • 直接使用confirm的返回值,而不是污染全局命名空间的变量。
  • 将其编写为单个字符串,而不是一堆字符串。
private void AlertWithConfirmation() {
  Response.Write(
    "<script type=\"text/javascript\">" +
    "if (window.confirm('Are you sure you are ok?')) {" +
    "window.alert('Good!');" +
    "} else {" +
    "window.alert('Too bad');" +
    "}" + 
    "</script>"
  );
}

请注意,如果您在常规页面中使用此方法,则会在文档类型标记之前编写脚本标记,这将导致浏览器进入怪异模式,并且很可能会破坏您的布局。如果您想向常规页面添加脚本,您应该在页面上放置一个占位符来添加脚本,或者使用ClientScriptManager.RegisterStartupScript方法。

1

确保 Response.Write 的结果看起来像这样:

<script type="text/javascript">
    var x=window.confirm('Are you sure you are ok?');
    if (x) {
        window.alert('Good!');
    } else {
        window.alert('Too bad');
    }

</script>

我更改了代码,但仍无法工作: private void AlertWithConfirmation()
{
Response.Write("<script type="text/javascript">");
Response.Write("var x=window.confirm("你确定没问题吗?")");
Response.Write("if (x)");
Response.Write("window.alert("很好!")");
Response.Write("else");
Response.Write("window.alert("太糟糕了")");
Response.Write("</script>");
- mikespiteri
你的输出,也就是你的HTML文件的实际源代码是什么样子? - T. Junghans

1

由aspx页面生成的HTML在页面生命周期的渲染阶段呈现。

因此,如果您在页面生命周期的早期调用Response.Write,它将在第一个标签之前的页面开头输出 - 几乎肯定不是您想要的。

如果您检查生成的HTML(在浏览器中查看源代码),您会看到这一点。

通常,如果您想呈现一些javascript,您应该使用其他技术,例如在页面的适当位置设置Literal控件的Text属性。


1

谢谢您告诉我过去24小时我所做的事情。你真的很有帮助。 - mikespiteri
我曾试图在你之前的问题中帮助你(我给你写了信但没有得到任何回复),但是后来你又开始了另一个问题和另一个问题。 - Kristoffer Lundberg

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