MozTW 討論區
https://forum.moztw.org/

[問題]prototype.js在Opera上的奇異行為
https://forum.moztw.org/viewtopic.php?f=13&t=20341
1 頁 (共 1 頁)

發表人:  legnaleurc [ 2007-09-14, 18:06 ]
文章主題 :  [問題]prototype.js在Opera上的奇異行為

範例

我在IE6,Firefox2,Konqueror上都測過
它對Element擴充的replace可以正常運作
但是在Opera9.23上
replace卻失效了
而且它的type竟然是String
有趣的是其他的擴充功能是正常的

這是哪一方的BUG呢?

發表人:  kourge [ 2007-09-16, 04:14 ]
文章主題 : 

奇怪,可是在你的網頁上,我用 Opera 測試 $('main').replace('blah') 卻是可以用呀?

發表人:  legnaleurc [ 2007-09-16, 10:29 ]
文章主題 : 

那在observe裡使用bind可以正常運作嗎?
或是在我列出的物件裡,replace有正常嗎?
因為Element.replace在Opera上時好時壞,而且原因不明
所以才說是奇特行為

發表人:  kourge [ 2007-09-17, 01:35 ]
文章主題 : 

你是如何 bind function 會讓它不正常?有時候 bind 是很灰色地帶的東西><"
假設:
代碼:
<div id="test">Test</div>

var Blah = {
  str: "bling",
  go: function(e) {
   
  }
};

$('test').observe('test', Blah.go.bindAsEventListener());

這時在 Blah.go 內,this 會變成 window,必須:
Blah.go.bindAsEventListener(Blah)
Blah.go 的 this 才會指到 Blah。那原來發動這個事件的元素怎麼辦?因為用 bindAsEventListener,所以 e 會是被發動的 event,所以:
代碼:
go: function(e) {
  var element = $(Event.element(e));
  element.replace('blah');
}

發表人:  legnaleurc [ 2007-09-17, 12:51 ]
文章主題 : 

我現在把問題簡化一點好了
實作
只看listen這個全域函式
然後只列出replace和stopObserving這兩個function的內容
不使用Function的bind
在Opera上stopObserving有反應
但replace雖有定義卻會變成空字串
不管是直接指定觸發事件的元素的名稱
或是使用bind使該元素被this參照
其結果都一樣

發表人:  kourge [ 2007-09-17, 13:46 ]
文章主題 : 

那...如果把 element 用 $() 或 Element.extend() 再包一次呢?

發表人:  legnaleurc [ 2007-09-17, 14:04 ]
文章主題 : 

殘念,還是失敗

真的是莫名其妙....

發表人:  kourge [ 2007-09-18, 13:39 ]
文章主題 : 

真是怪了...

發表人:  legnaleurc [ 2007-09-18, 16:14 ]
文章主題 : 

想搞清楚的是
到底是我的寫法不嚴謹(剛剛想到在刪除一個node之前是不是要先stopObserving)
還是prototype的問題
或是根本就是Opera的bug?

之前Google的時候沒發現有類似的問題

發表人:  kourge [ 2007-09-22, 13:07 ]
文章主題 : 

legnaleurc 寫:
想搞清楚的是
到底是我的寫法不嚴謹(剛剛想到在刪除一個node之前是不是要先stopObserving)
還是prototype的問題
或是根本就是Opera的bug?

之前Google的時候沒發現有類似的問題

我發現 remove() 有個有趣的現象...就是移除一個元素以後還會把它 return 回來...
至於 stopObserving...試試看吧XD

Prototype 的 trac 好像沒有:
http://dev.rubyonrails.org/search?q=ope ... &ticket=on

發表人:  legnaleurc [ 2007-09-24, 21:21 ]
文章主題 : 

好像是在each底下的element開始
replace就被Opera當成unknown code了

大概只能用remove + Insertion了吧

發表人:  kourge [ 2007-09-25, 13:57 ]
文章主題 : 

以往我都是先 Insertion 再 remove...話說 Prototype 1.6 有新的 insert API。

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/