【问题标题】:Web forms: body onload event can't find a Javascript functionWeb 表单:body onload 事件找不到 Javascript 函数
【发布时间】:2011-11-19 17:46:15
【问题描述】:

我来自 MVC 背景,对 Web 表单几乎没有经验。

我已经确定问题出在哪里,但到目前为止我无法解决这个问题。

我有一个表单,用于在表单主体加载时执行 Javascript 函数。请注意 head 标签有一个 run at server 属性,因为它需要使用Request.QueryString

代码如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<script type="text/javascript">

    function doSomething()
    {
        // Use web forms to do something
        var foo = <%= Request.QueryString["input"] %>;
    }
    
</script>
<title>Foo</title>
</head>
<body onload="doSomething()">
    <form id="MainForm" runat="server">
    <table width="272px" border="0" cellpadding="0" cellspacing="0">
        <tr>
            <td class="body">
                ...
            </td>
        </tr>
    </table>
    </form>
</body>
</html>

我收到以下错误:

SCRIPT5007:属性 doSomething 的值为 null 或未定义,不是 Function 对象。

我的猜测是某些东西在服务器或其他方式上执行。这在以前(一年多前)已经有效,因此可能会覆盖 Web 配置中的某些内容。我花了大部分时间在这上面,到目前为止没有运气。

编辑:生成的输出如下

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    
<script type="text/javascript">

    function doSomething()
    {
        debugger;                 
        var o = crmForm.queryString;    
    }
    
</script>


    <title></title>
</head>
<body onload="doSomething()">
    <form name="MainForm" method="post" action="fooPage.aspx?input=queryString" id="MainForm">
<div>
// hidden fields
    <table width="272px" border="0" cellpadding="0" cellspacing="0">
        <tr>
            <td class="body">
                // inputs
            </td>
        </tr>
    </table>
    


</form>
</body>
</html>

【问题讨论】:

  • 您可以尝试从 head 标签中删除 runat="server"
  • 您能否发布最终标记的样子?此外,您不需要使用runat="server" 来执行服务器端表达式。据说服务器端表达式似乎没有用引号引起来。你确定input 是一个整数。因为如果不是,foo 变量将是未定义的。
  • 阿什,谢谢你的回复。请查看编辑
  • 达林,感谢您的回复。请查看编辑。
  • @CodeRush,在生成的 HTML 中,您似乎使用了一些 crmForm.queryString 变量,我看不到在任何地方定义。如果您将doSomething 中的代码替换为警报,请将其放入 HTML 页面并在浏览器中运行,它可以正常工作。因此,您的 HTML 中肯定还有一些您没有显示的内容。

标签: javascript asp.net webforms dom-events


【解决方案1】:

除了使用body标签的onload属性,您还可以在&lt;script&gt;标签内添加以下代码:

if(window.addEventListener) window.addEventListener("load", doSomething, true);
else window.onload = doSomething;

【讨论】:

  • 谢谢,我试试看。
猜你喜欢
  • 2011-07-08
  • 2011-12-30
  • 2014-05-13
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 2010-11-17
相关资源
最近更新 更多