我在页面上使用iframe,它由带有输入元素的表单组成。 每个输入元素都有一个onblur()事件,用于验证输入。
当我在IE 8中使用新清除的缓存打开页面时,会产生类似的javascript错误。
document.getElementById(...)' is Null or not an Object
但是,当我检查表单时,它会被完全加载,并且我正在尝试访问它。 此外,当我重新加载整个页面时,我不再有任何错误。 此外,当我自己加载iframe的内容时,我也不会出错。
Firefox和Chrome根本不会抛出错误。
简而言之,我得到的Javascript错误只发生在IE中,并且只有当我使用iframe显示表单(这是必需的)时才会出现,并且只有在第一次加载页面时才会出现。
关于如何解决此问题的任何想法?
我希望它不会让人感到困惑。
编辑:
document.getElementById("vHint_"+fieldName).innerHTML=data;
FieldName是输入字段的id。数据是验证的返回值。 在这种情况下,数据是图像标签。 每个输入字段都是一个标记为“vHint _”+ fieldName。
的范围标记事件的附件如下:
<input id="Jahr" class="input" type="text" onblur="validDate(this,'Jahr','_beginn')" maxlength="4" style="width:32px" value="" name="Jahr">
答案 0 :(得分:1)
首先感谢您的努力。 提供的示例user13500像魅力一样工作。 它让我深入挖掘。
我找到了解决方案。
所有输入字段都是使用自制的ASP Framework创建的,它将所有输入字段都放在Session中。
iframe中输入字段的onblur()事件触发对ASP文件的AJAX请求,将输入字段的名称作为请求参数传递。 ASP文件现在尝试在Session中查找字段并检索其值以验证输入。
之后,结果将发布回javascript文件,然后使用document.getElementById("vHint_"+fieldName).innerHTML=data;
将结果发布回页面。
这通常没有错误。 但是,由于应用程序在iframe中运行,并且周围页面的域和iframe中的应用程序不同,因此IE拒绝iframe的会话。因此,ASP验证的结果为空,因为它无法在Session中找到该字段。
认识到唯一需要做的就是在应用程序中添加这行代码:
Response.AddHeader "P3P", "CP=""CAO PSA OUR"""
这样IE就不再拒绝应用程序的会话了。 也许这对其他人也有用。