jQuery选择器在IE7/8中不起作用

jQuery selector does not work in IE7/8

本文关键字:不起作用 IE7 选择器 jQuery      更新时间:2023-09-26

有人知道为什么这在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

IE在全局范围内注册某些属性时有一种奇怪的行为。具有给定ID的元素可以简单地通过使用ID来访问。

因此,您有一个ID为"drop_area"的元素,可以使用此ID在IE中访问它,请尝试:

alert(drop_area.tagName)

检查它。(应该给出"DIV")

那么会发生什么呢:当使用drop_area = $('div#drop_area');时,您试图将其他内容分配给这个元素,但这是对DOMElement的无效操作。

因此,使用var关键字来澄清您想要创建一个变量

var drop_area = $('div#drop_area');

或者在必须在函数内创建全局变量的情况下,将变量分配给全局上下文:

window['drop_area'] = $('div#drop_area');

您在pastebin上显示的代码存在许多全局变量问题。换句话说,您在编码时假设您所声明的变量在范围内是局部的,而实际上它们是全局的。示例包括setbox_handleelementsiiddrop_areaelementrowimage_id等。当您的所有函数都可以很容易地封装在其他函数中时,它们的作用域也是全局的。

现在,我不知道是否有一些微妙的交互正在进行,是否有些代码已经被其他代码锤击(全局)数据集,但似乎肯定有什么东西被覆盖了,因此方法和属性正在消失。首先,我将遍历代码并将var添加到局部变量中。接下来,我将把大部分代码封装在一个匿名的自动执行函数中。

通常该错误显示,您在同样使用Prototype的网站上使用jQuery。这就是为什么会出现错误(实际上是Prototype抛出的)。另一种可能性是,在jQuerylib被包含到HTML中之前,您尝试调用代码。

为了确保这不是我的第一个猜测,请将以下代码添加到您的JS代码中:

$.noConflict();

因此,在包含jQuery之前,将Prototype包含在HTML中是很重要的:http://api.jquery.com/jQuery.noConflict/

如果用jQuery()替换所有出现的$()并且它有效,那么这是同时使用jQuery和Prototype的第一个问题。

您有一个id为"drop_area"的元素吗?ie6/7/8自动使用元素id为dom元素分配一个全局var。更多的代码会有所帮助。