2009-10-13 139 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那樣能夠改變'主機對象'的原型,即使你可以得到它們的構造函數的句柄,這也沒有被指定存在於任何特定的地方原型是利用非標準的功能,使代碼可能看起來更好,但你不能在實踐中利用這一點,令人遺憾)。

相關問題