繁体   English   中英

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

[英]jQuery selector does not work in IE7/8

有谁知道为什么这在 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 在全局 scope 中注册某些属性有一种奇怪的行为。 具有给定 ID 的元素可以简单地通过使用 ID 来访问。

所以你有一个 ID 为“drop_area”的元素,它可以通过使用这个 ID 在 IE 中访问,尝试:

alert(drop_area.tagName)

..检查它。(应该给“DIV”)

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

所以使用 var-keyword 来阐明你想要创建一个变量

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

或者如果您必须在 function 中创建全局变量,请将变量分配给全局上下文:

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

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

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

$.noConflict();

Therefore it is important that Prototype is included into the HTML, before jQuery is included: http://api.jquery.com/jQuery.noConflict/

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

你有一个 id 为“drop_area”的元素吗? 即 6/7/8 自动使用元素 id 将全局变量分配给 dom 元素。 更多代码会有所帮助。

您在pastebin上显示的代码有许多全局变量问题。 换句话说,您正在编码假设您声明的变量在 scope 中是本地的,而实际上它们是全局的。 示例包括setbox_handleelementsiiddrop_areaelementrowimage_id等。所有函数在 scope 中也是全局的,因为它们可以很容易地封装在另一个 function 中。

现在我不知道是否发生了一些微妙的交互,是否某些代码具有由其他代码设置的锤击(全局)数据,但似乎某些东西正在被覆盖,因此方法和属性正在消失。 我将首先浏览代码并将var添加到局部变量。 接下来,我将把大部分代码封装在匿名自动执行 function 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM