"document.formName"未定义?

voi*_*hos 8 javascript asp.net

我有一个使用IIS Express在我的XP系统上本地运行的ASP.NET站点.在Windows服务器上运行该站点的实时版本.

在网页中,Javascript通常会使用样式在页面上引用表单document.formName,其中formName是表单的名称.据我所知,这是一个跨浏览器的方法,随着document.forms.formNamedocument.forms[0]等等.

在我的本地开发站点上,引用document.frm1(我知道,错误的命名实践)错误; 它是未定义的.另一方面,document.forms.frm1工作正常.奇怪的是,这不会发生在服务器上,尽管两个页面都是相同的代码.我用Firebug和IE8和Firefox 6进行了双重检查.

另一个奇怪的部分:使用Firebug进行检查,document.frm1未定义,但document.frmClose(另一种形式)存在!咦?

以前有人经历过吗?

Chr*_*ker 13

编辑1

我做了一些实验,发现该id属性用于document.forms,而该name属性似乎用于document.formName

http://jsfiddle.net/GVjsv/


原始答案

确保在DOM准备好之前您的javascript没有执行.一种帮助方法是将您的javascript放在页面底部,或者如果您使用的是框架,请确保将代码包装在ready-type函数中:

jQuery:http://api.jquery.com/ready/

Mootools:http://mootools.net/docs/core/Utilities/DomReady

香草javascript:

window.onload = function() {
  // Code to be run.
} 
Run Code Online (Sandbox Code Playgroud)

服务器之间不一致的原因可能是本地开发服务器比实时服务器更快地加载页面.时间计算成功,这样你通常不会在两个地方都得到相同的错误 - 强调是因为如果你尝试了足够多次,你可能会在两个地方重现错误.


Rob*_*ker 8

要将name属性添加到表单元素,您需要添加...

<system.web>
    <pages controlRenderingCompatibilityVersion="3.5" /> <!-- http://www.asp.net/whitepapers/aspnet4/breaking-changes -->
</system.web>
Run Code Online (Sandbox Code Playgroud)

...到你的web.config