使用JQuery 1.2.6,从Firefox3和IE7进行测试。我有一个非常基本的JavaScript来重新加载验证码图像。在我的JS文件中,我有:
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++;
    }
}我的链接如下所示:
<a href="javascript:void(0);" id="ChangeCaptcha" onclick="Captcha.Refresh();">Try a different image</a>当我点击该链接时,我得到一个JavaScript错误。在Firefox的Firebug插件中,它说"Captcha.Refresh“不是一个函数。因此,我转到同一窗口中的Firebug控制台,输入
Captcha我在响应行中得到了一个“对象”(正如所期望的)。然后我输入
Captcah.Refresh我在响应行中得到了一个函数()(不出所料)。然后我输入
Captcha.Refresh()然后它执行函数,更新我的验证码图像,一切都很棒。如果我返回并再次尝试链接,它仍然不起作用。如果我在控制台中输入Capcha.Refresh()而不点击链接,它也可以正常工作。我到底错过了什么?显然,JS正在加载,但为什么该函数调用不起作用?
发布于 2009-02-10 19:44:43
出现这个问题是因为您有一个id为Captcha的元素,以及一个同名的全局变量。IE传统上为每个id属性引入一个全局变量。FF不..。但为了与IE兼容,在某些情况下会假装这样做。在本例中,click处理程序将验证码视为元素,而不是您的对象。
解决方法:
更改Captcha元素的id。
或者,将全局对象的名称更改为Captcha以外的名称。
或者,使用Pim Jager's technique将处理程序的解释移动到一个上下文中,在该上下文中,全局Captcha变量已被您自己的变量覆盖。
或者,将onclick属性更改为:
onclick="window.Captcha.Refresh();"...this将在被全局变量替换的上下文中强制查找Captcha属性。
(所有这些都是在IE6和FF3中测试的--我推荐Pim Jager的答案)
发布于 2009-02-10 19:37:18
尝试将HTML和javascript分开:
$('#ChangeCaptcha').click(Captcha.Refresh);https://stackoverflow.com/questions/533817
复制相似问题