2010年2月22日

JavaScript 的 eval() 使用

試著處理 browser 欄位輸入時與輸入後對 spinner 圖示進行顯示與取消, 在 Prototype JS 的用法為:
Effect.Appear('ele_ID_of_spinner',{duration:0.1, queue:'end'});
以及
Effect.Fade('ele_ID_of_spinner',{duration:0.1, queue:'end'});
此外, 還得為所有欄位/操作項目進行鎖定或取消處理; 必要時還得加上 cursor 的圖示變化。
所以, 模組化的結果為:
function disableAllInput(flag) {
  // 1.cursor 變化
  ...
  // 2.spinner 顯示或取消
  ...
  // 3.所有 input element 的 disabled 屬性值設定
  ...
}
不過, 上述第2段中 spinner 處理上的 API 用法只有一字之差; 因此, 是可以利用 eval() 來進行變化的:
eval("Effect."+(flag ? 'Appear' : 'Fade'))('ele_ID_of_spinner',{duration:0.1, queue:'end'});
模組化或 script code 的精簡情形, 一向是見人見智; 為日後的維護工作, 方法上得小心使用。

1 則留言:

Unknown 提到...

自己加一些來自Java導師的建議:

i think "eval" is "evil" and should be used with utmost care.

(http://javascript.crockford.com/code.html)