有谁知道为什么这在IE7 / 8中不起作用?
drop_area = $('div#drop_area');
在IE9,FF2 / 3和Chrome中完美运行。 Internet Explorer 7/8出现以下错误:
SCRIPT438: Object doesn't support this property or method
编辑:这是与我的javascript一起使用的HTML: http://pastebin.com/nwxx8RzW
答案 0 :(得分:2)
IE在全局范围内注册某些属性有一种奇怪的行为。只需使用ID即可访问具有给定ID的元素。
所以你有一个ID为“drop_area”的元素,可以在IE中使用这个ID访问它,试试:
alert(drop_area.tagName)
..检查它。(应该给“DIV”)
那么会发生什么:在使用drop_area = $('div#drop_area');
时尝试为此元素指定其他内容,但这对DOMElement执行的操作无效。
因此,请使用var-keyword来阐明您要创建变量
var drop_area = $('div#drop_area');
或者如果您必须在函数内创建全局变量,请将变量分配给全局上下文:
window['drop_area'] = $('div#drop_area');
答案 1 :(得分:1)
通常该错误表明,您在使用Prototype的网站上使用jQuery。这就是为什么得到一个错误(实际上由Prototype抛出)。另一种可能性是,在将jQuery lib包含在HTML中之前,您尝试调用代码。
为了确保这不是我的第一个猜测,请将此代码添加到您的JS代码中:
$.noConflict();
因此,在包含jQuery之前,将Prototype包含在HTML中非常重要:http://api.jquery.com/jQuery.noConflict/
如果你用jQuery()替换所有出现的$()并且它有效,那么这是同时使用jQuery和Prototype的第一个问题。
答案 2 :(得分:1)
你有一个id为'drop_area'的元素吗?即6/7/8 auto使用元素id为dom元素分配全局var。更多代码会有所帮助。
答案 3 :(得分:1)
您在pastebin上显示的代码存在许多全局变量问题。换句话说,您正在编码,假设您声明的变量在范围内是本地的,而实际上它们是全局的。示例包括set
,box_handle
,elements
,i
,id
,drop_area
,element
,row
, image_id
等等。当你可以很容易地将它们封装在另一个函数中时,你的所有函数都是全局的。
现在我不知道是否存在一些微妙的交互,一些代码是否有其他代码设置的锤击(全局)数据,但看起来似乎有些东西被覆盖,因此方法和属性正在消失。我将首先浏览代码并将var
添加到局部变量。接下来,我将在匿名自动执行函数中封装大部分代码。