サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2013/03/28

Object.prototypeが使えないあるWebアプリ上のJavaScript

現在使っているあるパッケージWebアプリでは、ユーザがある程度自由にJavaScriptでカスタマイズできるようになっています。UIの部分は元々実装されているのですが、UIに少し不満を感じる場合は、JavaScriptで補うことができます。

今回しようと思ったのは、textboxをdisableした時に、disableされたことがわかるようにグレーアウトすること。対象となるtextboxのオブジェクトをtbとすると、

tb.disabled = true;
tb.style.backgroundColor = "#eeeeee";

という2行を書くことになる。この書き方には2つの不満があります。一つはdisabledをtrueと書くこと。Delphiなど多くの言語では、enabledプロパティをfalseにするのですが、JavaScriptは逆。これは気持ち悪い上に、頻繁に書いていると錯覚を起こしそう。できればenabledをfalseにするように書きたい。もう一つの不満は、disableの度にこの2行を書かないといけないこと。これも面倒です。ということはこう書けばよい。

Object.prototype.enabled = function (bln) {
if (bln) {
this.disabled = false;
this.style.backgroundColor = "#ffffff";
} else {
this.disabled = true;
this.style.backgroundColor = "#eeeeee";
}
}

呼び出しは、tb.enabled(false); 素のhtmlに上記のJavaScriptのコードを書いて動作確認すると、問題なく動きます。ところが今回のパッケージWebアプリでこれを書くと、エラーになりました。このWebアプリではtextboxなどのオブジェクトは、通常のJavaScriptのオブジェクトではなく、Object.prototypeというのが使えないようです(以前String.prototypeはやってみて使えましたが)。で、次のように書き換えました。

function enabled(obj, bln) {
if (bln) {
obj.disabled = false;
obj.style.backgroundColor = "#ffffff";
} else {
obj.disabled = true;
obj.style.backgroundColor = "#eeeeee";
}
}

そして呼び出し方は、enabled(tb, false);と書くと期待通りに動きました。とはいえ、この書き方は気持ち悪いし、センスも悪い。しかし背に腹は変えられませんから、これを採用しました。

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/1513-da39e5d9

■  カレンダー

05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。