MozTW 討論區

各項 Mozilla 相關軟體與技術討論
現在的時間是 2025-08-07, 19:19

所有顯示的時間為 UTC + 8 小時





發表新文章 回覆主題  [ 12 篇文章 ] 
發表人 內容
文章發表於 : 2007-08-31, 18:54 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
原本我是想利用每個HTML element的id和class屬性去註冊一個監聽函式,來取代onload等屬性
但是這麼做會變得很難傳引數
比方說可能有五個變量要傳遞
但是這些並不能合理地放在DOM的屬性裡

有沒有什麼比較好的方法解決呢?
edit:
也許利用JSON去解出物件會比較好?


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-08-31, 22:15 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
我知道你指的是什麼,可是沒有範例實在是很難以舉例...

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-08-31, 22:33 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
假設
代碼:
<button type="button" value="[myclipURI]" class="Media">click to invoke</button>
<script type="application/javascript">
[register onclick event at ".Media"]
[take the value of "value" and insert OBJECT node]
</script>

一般來說只要傳入URI就好
可是如果要加入維度的設定或是播放器的選項
也不能隨便加個屬性放進<button>裡(個人覺得這樣很怪)
我有看過jQuery有類似的功能
但是好像不能做太詳細的設定

我的想法是
value="[JSON]"
然後用eval解成Object
可是不知道有沒有比較好的做法


最後由 legnaleurc 於 2007-09-01, 01:32 編輯,總共編輯了 1 次。

回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-01, 00:19 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
jQuery 官方有個 plugin,叫做 Metadata,不過 Metadata 有其缺點,所以有人開發出 Metaobjects

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-01, 01:47 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
其實我舉object只是其中一種應用例子
而且我已經寫了一些依賴Prototype的自用函式庫,再加上jQuery我不知道會不會conflict

主要是在有多個引數要傳遞時
用什麼方法比較好?
因為我後來用JSON時
發現如果要放在attribute裡
那麼String的"要逸出為&quot;
看起來有夠醜...


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-03, 22:33 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
如果是 Prototype,我通常都會把各種設定藏在 markup 裡面,到時候事件的監聽器被發動時,監聽器函式再讀取事件來源元素的 markup 裡面之屬性,這樣子就完全把傳遞引數給省掉了。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-04, 03:00 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
所以說作法是
<button class="Example" attr1="blahblah" attr2="blahblah" attr3="blahblah">omote no monji</button>

然後
$$( '.Example' ).each( function( X ) {
X.observe( 'click', function( E ) {
var attributes = {
attr1: X.readAttribute( 'attr1' ),
attr2: X.readAttribute( 'attr2' ),
attr3: X.readAttribute( 'attr3' )
};
} );
} );

這樣嗎?(當然避開該element原本的屬性)

因為這種做法好像在自行擴展DOM
之前不太敢這樣做


回頂端
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-04, 21:40 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
legnaleurc 寫:
所以說作法是
<button class="Example" attr1="blahblah" attr2="blahblah" attr3="blahblah">omote no monji</button>

然後
$$( '.Example' ).each( function( X ) {
X.observe( 'click', function( E ) {
var attributes = {
attr1: X.readAttribute( 'attr1' ),
attr2: X.readAttribute( 'attr2' ),
attr3: X.readAttribute( 'attr3' )
};
} );
} );

這樣嗎?(當然避開該element原本的屬性)

因為這種做法好像在自行擴展DOM
之前不太敢這樣做

對,像這樣:
代碼:
$$('.Example').invoke('observe', 'click', function() {
  var attributes = {};
  var element = $(this);
  $w('attr1 attr2 attr3').each(function(attr) {
    attributes[attr] = element.readAttribute(attr);
  });
});

以上的 code 作用跟你的差不多,只是稍微有點擴充性。
這樣的確有點「私自擴充」的意味,不過只要 attribute 不衝突舊好,像 Dojo 也是利用這一點。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-17, 01:40 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
突然間想到還有一個方法,就是利用 bindAsEventListener。
代碼:
<button type="button" value="[myclipURI]" class="Media">click to invoke</button>
<script type="application/javascript">
$$('.Media').invoke('observe', 'click', function(e, width, height) {
  //e == event
}.bindAsEventListener(null, 640, 480));
</script>

這樣函式被呼叫的時候,第一個參數是事件,第二個參數是 640,第三個參數是 480,this 為 window。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-17, 12:54 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
不過這樣的作法還是要把script寫到HTML裡吧?
如果撰寫HTML的人想改參數的話


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-17, 13:06 
離線
[網站管理員]
頭像

註冊時間: 2004-09-27, 09:24
文章: 1685
是沒錯。

_________________
korp + korp 中文站(沒精神更新)


回頂端
Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
 文章主題 :
文章發表於 : 2007-09-17, 13:11 
離線
頭像

註冊時間: 2006-10-27, 07:29
文章: 1068
說到這個我才想到....
不知道Trident什麼時候才會支援application/javascript....(茶)


回頂端
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6
 個人資料  
引用回覆  
顯示文章 :  排序  
發表新文章 回覆主題  [ 12 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
Powered by phpBB® Forum Software © phpBB Group
正體中文語系由 竹貓星球 維護製作
© moztw.org, Mozilla Foundation
MozTW,Mozilla 台灣社群