Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的事件处理程序会导致;不是一个函数;错误,但可从Firebug控制台工作?_Javascript_Jquery - Fatal编程技术网

Javascript 为什么我的事件处理程序会导致;不是一个函数;错误,但可从Firebug控制台工作?

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

使用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
        $('#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“答案”,因为他解释了原因