【问题标题】:safari ReferenceError: Can't find variableSafari ReferenceError:找不到变量
【发布时间】:2011-05-22 05:25:58
【问题描述】:

我在自己的 DIV 中有以下内容

<script>
function newfunc()
{
alert("here");
}
</script>
<button type="button" onclick="newfunc()">Press me</button>

在 IE 和 FF 上运行良好,但在 Safari(至少 Safari 4.0.5)上显示“ReferenceError 找不到变量” - 现在内容已动态加载到 DIV 中,似乎 Safari 看不到此 DIV 中的函数定义 - 但是,如果我将函数 newfunc() 放在主 HTML 页面上(即不在 DIV 中),则按下按钮会调用该函数。

就好像 Safari 没有看到已经添加到 DIV 中的 Javascript 函数。

任何帮助将不胜感激。

亚当

【问题讨论】:

  • 如果是这样,您希望我们做什么?您唯一的选择是将 JS 代码放在主体中。告诉我们您的服务器端代码是什么语言,发布您当前的代码,我们会尽力为您提供指导。
  • 不可能将所有功能都放入主页,因为某些功能包含动态内容,例如在加载 div 内容时检查的会话数据。
  • 查看gymadvisory.co.uk 按下 Find Gyms 它可能会显示一个无样式的页面 - 这是因为 button 元素还没有 type="button" 属性并且因为 jquery 分配的 click 函数试图调用 javascript 函数它找不到它提交 - 添加缺少的属性将停止,但然后按下按钮什么都不做
  • 另外——一旦显示无样式的页面,按下返回按钮并重试——它现在应该可以工作了!不知道为什么返回的页面应该可以工作
  • 恢复到以前版本的应用程序,看起来还可以,所以一定是 javascript 更改中的错误,尽管仍然是奇怪的行为。

标签: javascript safari referenceerror


【解决方案1】:

动态添加到页面的 Javascript 需要 eval-d 才能正确初始化。

为了使函数定义能够正常工作,它们的格式需要稍有不同。例如:

<script>
newfunc = function()
{
alert("here");
}
</script>
<button type="button" onclick="newfunc()">Press me</button>

将内容添加到 DIV 后,从 DIV 中提取所有标记元素并评估其内容。

例如,使用 PrototypeJS (http://www.prototypejs.org/api/):

$(divid).innerHTML.evalScripts();

div 是您刚刚填充内容的 div 的 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2018-04-24
    • 1970-01-01
    • 2016-10-30
    • 2012-03-18
    相关资源
    最近更新 更多