首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的事件处理程序会导致“不是函数”错误,而是在Firebug控制台中工作?

为什么我的事件处理程序会导致“不是函数”错误,而是在Firebug控制台中工作?
EN

Stack Overflow用户
提问于 2009-02-10 19:32:47
回答 2查看 14.5K关注 0票数 5

使用JQuery 1.2.6,从Firefox3和IE7进行测试。我有一个非常基本的JavaScript来重新加载验证码图像。在我的JS文件中,我有:

代码语言:javascript
运行
复制
var Captcha = {
    count: 0,

    Refresh: function(){
        // Concatenate "count" to force a URL change, which forces the browser to reload the image
        $('#Captcha').attr('src', 'Captcha.aspx?' + Captcha.count);
        Captcha.count++;
    }
}

我的链接如下所示:

代码语言:javascript
运行
复制
<a href="javascript:void(0);" id="ChangeCaptcha" onclick="Captcha.Refresh();">Try a different image</a>

当我点击该链接时,我得到一个JavaScript错误。在Firefox的Firebug插件中,它说"Captcha.Refresh“不是一个函数。因此,我转到同一窗口中的Firebug控制台,输入

代码语言:javascript
运行
复制
Captcha

我在响应行中得到了一个“对象”(正如所期望的)。然后我输入

代码语言:javascript
运行
复制
Captcah.Refresh

我在响应行中得到了一个函数()(不出所料)。然后我输入

代码语言:javascript
运行
复制
Captcha.Refresh()

然后它执行函数,更新我的验证码图像,一切都很棒。如果我返回并再次尝试链接,它仍然不起作用。如果我在控制台中输入Capcha.Refresh()而不点击链接,它也可以正常工作。我到底错过了什么?显然,JS正在加载,但为什么该函数调用不起作用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-10 19:44:43

出现这个问题是因为您有一个id为Captcha的元素,以及一个同名的全局变量。IE传统上为每个id属性引入一个全局变量。FF不..。但为了与IE兼容,在某些情况下会假装这样做。在本例中,click处理程序将验证码视为元素,而不是您的对象。

解决方法:

更改Captcha元素的id。

或者,将全局对象的名称更改为Captcha以外的名称。

或者,使用Pim Jager's technique将处理程序的解释移动到一个上下文中,在该上下文中,全局Captcha变量已被您自己的变量覆盖。

或者,将onclick属性更改为:

代码语言:javascript
运行
复制
onclick="window.Captcha.Refresh();"

...this将在被全局变量替换的上下文中强制查找Captcha属性。

(所有这些都是在IE6和FF3中测试的--我推荐Pim Jager的答案)

票数 14
EN

Stack Overflow用户

发布于 2009-02-10 19:37:18

尝试将HTML和javascript分开:

代码语言:javascript
运行
复制
$('#ChangeCaptcha').click(Captcha.Refresh);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/533817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档