Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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,在Mozilla中工作,但不在IE中工作_Javascript_Internet Explorer 6_Prototypejs - Fatal编程技术网

原型Javascript,在Mozilla中工作,但不在IE中工作

原型Javascript,在Mozilla中工作,但不在IE中工作,javascript,internet-explorer-6,prototypejs,Javascript,Internet Explorer 6,Prototypejs,我正在使用prototype v.1.6.0.3中的JavaScript库 我发现基本符号$在Mozilla中运行良好,但在IE6中不起作用 下面是一个简单的例子 Element.hide('div123')-->在IE和Mozilla上工作 $('div123').hide() -->只在Mozilla工作 我想知道我在这里遗漏了什么,因为我还有一些在IE中不起作用的案例,比如拖放(它在IE中从未被删除,但在Mozilla中很好)。 虽然据我所知,原型是“支持”的,即?我认为错误不在发布的

我正在使用prototype v.1.6.0.3中的JavaScript库 我发现基本符号$在Mozilla中运行良好,但在IE6中不起作用

下面是一个简单的例子

  • Element.hide('div123')-->在IE和Mozilla上工作
  • $('div123').hide()
    -->只在Mozilla工作
我想知道我在这里遗漏了什么,因为我还有一些在IE中不起作用的案例,比如拖放(它在IE中从未被删除,但在Mozilla中很好)。
虽然据我所知,原型是“支持”的,即?

我认为错误不在发布的代码中;这两个版本都适用于我,在不同的浏览器上,这两个调用都没有什么不同

然而,原型在IE和Mozilla中的工作方式确实非常不同,这可能会在代码的其他地方造成差异

在Mozilla中,Prototypre将其方法添加到HtmleElement等的原型中,这样所有DOM对象都可以直接调用这些方法。但是,这在IE(*)中是不可能的,因此要覆盖所有浏览器,您必须“扩充”每个要调用方法的节点,可以显式地调用
元素。扩展
,也可以隐式地使用Prototype自己的方法之一,例如
$
函数,以获取对象的句柄:

document.getElementByID('foo').hide(); // ok on Mozilla, fail on IE

$('foo').hide(); // ok everywhere

Element.hide('foo'); // ok everywhere

Element.extend(document.getElementByID('foo'));
document.getElementByID('foo').hide(); // ok everywhere
这实际上是Prototype最糟糕的特性之一,因为您可以在Mozilla中编写大量代码,这些代码在IE中会失败而不会注意到:与其说是隐藏浏览器的差异,不如说是放大了它们

更糟糕的是,由于Prototype自己的许多方法都隐式扩展了对象,而且这些节点一旦扩展就保留了它们的扩展,因此很容易出现这样的情况:在IE中,您的代码忘记扩展某个元素通常会起作用,因为其他东西已经扩展了它,但在某些更罕见的情况下会爆炸。这不利于调试


(*:不是IE的错。在ECMAScript标准中,即使您可以获得其构造函数的句柄,也不期望您能够更改DOM等“主机对象”的原型,因为构造函数也没有指定在任何特定位置存在。Prototype利用了一个非标准功能,使代码具有潜力ally看起来更好,但实际上你不能利用它,很遗憾。)

一个简单的测试似乎在IE6中起作用:你是否使用其他JavaScript库(例如jQuery)?非常感谢brianpeieris,你是对的,IE6中由另一个库mootools.js引起的所有奇怪的事情你真的帮了我!!