【问题标题】:Internet Explorer - "Object doesn't support this kind of property..."Internet Explorer - “对象不支持这种属性......”
【发布时间】:2012-08-03 17:48:41
【问题描述】:

我在 onkeyup 事件期间从位于父级的 iframe 调用位于父级窗口中的 Javascript 函数。 IE 抱怨并且 IE8 中内置的调试器停止并突出显示此代码中的“if 块”说 - "对象不支持这种属性或方法"

PS - 这段代码在 FF 中有效!

     <td class="grid" align="left">
     <input type="text" name="invqty${topitem.itemIdentifier}-<c:out value = "1"/>"
        id="invqty${topitem.itemIdentifier}-<c:out value = "1"/>" 
        value="0" 
        onFocus="this.select()" 
        onkeyup="if(!parent.validateFloat(this.id)) { this.value = '0'; } 
                 else { parent.updateBalance(${topitem.itemIdentifier}); }">
     </td>

有人有什么想法吗?

【问题讨论】:

  • 你能不能创建一个javascript函数,比如doKeyUp(thisElement, itemIdentifier),在函数中输入以下内容:if(!parent.validateFloat(thisElement.id)) { thisElement.value = '0'; } else { parent.updateBalance(itemIdentifier); }并使用onkeyup中的函数?就像onkeyup = "doKeyUp(this, ${topitem.itemIdentifier})" 现在如果你使用调试器,你可能会得到失败的确切行。
  • @Nivas - 调试器突出显示“if(!parent.validateFloat(this.id))” - 我知道它不喜欢这段代码。还是说问题可能出在其他地方?
  • 你定义了validateFloat 函数吗?
  • 是的 - 如果您认为对您有帮助,我会在上面添加。
  • @Bergi - parent 是我的 iframe 所在的主页。我从我的 iFrame 调用这个 onkeyup 事件。顺便说一句,它们在同一个域上。这在 FF 中有效,所以我相信这是 IE 特有的。

标签: javascript internet-explorer object onkeyup


【解决方案1】:

您的name 属性中有无效字符。阅读here 以进一步了解有效字符。

【讨论】:

  • name 属性解析为带有连字符的字母数字字符串(这是允许的) - 即“invqty12345-1”我认为这不是问题。
【解决方案2】:

您是否像从“file://”一样在本地运行此设置?那是行不通的。 IE 对本地运行的文件的 iframe 通信具有非常严格的安全模型。您需要通过网络服务器运行它。

【讨论】:

  • 不 - 我有一个 apache 实例,我在每次构建后都会启动它。
  • iframe 是否与父级在同一个域中?
  • @mafulu - 是的,iFrame 在同一个域中。
  • @Bergi - 是的,我目前正在这样做。
  • 顺便说一句 - 我正在处理的代码更改已经放在我们的测试服务器上,供 QA 使用,他们正在经历同样的事情。所以这不是问题。
【解决方案3】:

哇!!! 所以问题是这个 -

我在 iframe 中定义了大约 5 个函数。 它们都发生在一个“脚本块”中

其中一个功能是使用“for each”循环。这 5 个函数之一中的一个循环导致 IE 忽略了我正在执行此操作的整个“脚本块”。关键是 IE8 中的调试器告诉我问题出在一些虚假的行号上,这让我认为我的 iframe 以及我如何尝试定义我的 JS 函数存在问题。最后,我放弃了,去请有 MAC 的人使用 Safari 进行调试。 Safari 调试器使用 for each 循环确定了确切的行。我评论说,对于每个循环代码,IE 也开始工作了!

难以置信!

IE8 浏览器调试器的开发人员应该因为他们的无能而被用码棍殴打。我在这上面浪费了 3 天。 对 Apple 的窥视者表示敬意。

这里的经验教训 -

在编写 Javascript 时不要使用“for each”循环! 不要使用 Microsoft IE 品牌的调试器!它们很糟糕,会浪费你的时间。

感谢您的帮助 Bergi 和 Nivas!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2012-08-22
    相关资源
    最近更新 更多