2009-10-13 99 views
0

我正在使用基于原型v.1.6.0.3的JavaScript库 我发现基本表示法$在Mozilla中正常工作,但在IE6中没有问题。原型Javascript,在Mozilla中工作,但在IE中不工作

下面是简单的例子

  • Element.hide('div123'); - >在IE & Mozilla的
  • 工作$('div123').hide(); - >仅在Mozilla的

我想知道我是缺少在这里工作,因为我还有一些其他情况下不能在IE中工作,如拖动&下降(它永远不会在IE中下降,但在Mozilla中很好)。 虽然从我的理解原型是“支持”IE?

+2

一个简单的测试似乎在IE6中工作:http://jsbin.com/usaca您是否使用任何其他JavaScript库(例如jQuery)? – brianpeiris 2009-10-13 03:57:55

+0

非常感谢brianpeieris 你是对的,所有在另一个库引起的IE6奇怪的事情mootools.js 你真的帮助我! – beng 2009-10-13 05:34:54

回答

1

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

但是,原型在IE和Mozilla中的工作方式大不相同,这可能会导致代码中的其他地方出现差异。

在Mozilla中,Prototypre将其方法添加到HTMLElement等的原型中,以便所有DOM对象都可以直接调用这些方法。然而这在IE(*)中是不可能的,因此为了覆盖所有的浏览器,你必须'扩充'你想要调用方法的每个节点,或者明确地通过调用Element.extend,或者通过使用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 

这实际上是原型的最坏的特征之一,因为你可以写在Mozilla一的代码加载,将在IE中失败,并没有注意到:它不是如此多的隐藏浏览器差异,以放大它们。更糟糕的是,由于许多Prototype自己的方法隐式扩展对象,并且因为一旦扩展这些节点保留其扩展名,就很容易获得在IE中忘记扩展元素的代码通常工作因为别的东西已经延伸了,但在一些更罕见的情况下会炸毁。这不利于调试。 (*:不是IE的错误,在ECMAScript标准中,你不能期望像DOM那样能够改变'主机对象'的原型,即使你可以得到它们的构造函数的句柄,这也没有被指定存在于任何特定的地方原型是利用非标准的功能,使代码可能看起来更好,但你不能在实践中利用这一点,令人遗憾)。