Javascript 为什么我的事件处理程序会导致;不是一个函数;错误,但可从Firebug控制台工作?
使用jQuery1.2.6,从Firefox3和IE7进行测试。我有一个非常基本的JavaScript代码来重新加载验证码图像。在我的JS文件中,我有:Javascript 为什么我的事件处理程序会导致;不是一个函数;错误,但可从Firebug控制台工作?,javascript,jquery,Javascript,Jquery,使用jQuery1.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 $('#Captch
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>
我在响应行中得到一个“object”(如预期的那样)。然后我打字
Captcah.Refresh
Captcha.Refresh()
我在响应行中得到一个函数()。然后我打字
Captcah.Refresh
Captcha.Refresh()
它执行功能,更新我的验证码图像,一切都很好。如果我返回并再次尝试该链接,它仍然不起作用。如果我在控制台中键入Capcha.Refresh()而不点击链接,它也可以正常工作。我到底错过了什么?显然JS正在加载,但为什么函数调用不起作用呢?尝试重新操作HTML和javascript:
$('#ChangeCaptcha').click(Captcha.Refresh);
出现问题的原因是您有一个id为
Captcha
的元素和一个同名的全局变量。IE传统上为每个id属性引入一个全局变量。FF不。。。但在某些情况下,为了与IE兼容,它会假装这样做。在这种情况下,click
处理程序将Captcha视为一个元素,而不是您的对象
解决办法:
更改Captcha
元素的id
或者,将全局对象的名称更改为除验证码以外的其他名称
或者,用于将处理程序的解释移动到全局Captcha变量已被您自己的覆盖的上下文中
或者,将onclick
属性更改为:
onclick="window.Captcha.Refresh();"
…这将强制在已被全局变量替换的上下文中查找Captcha
属性
(所有这些都在IE6和FF3中进行了测试-我推荐皮姆·贾格尔的答案)谢谢皮姆-给了你一个简短而中肯的投票,尽管给了Shog9“答案”,因为他解释了原因