2010年07月27日

jQuery:hiddenの値がbeforeSubmitで書き変わらない

javascript/jQueryの話です。

beforeSubmitで設定した関数内でhidden属性の値を書き換えたのですが、何度やってもうまくいきません。
かわりに、beforeSerializeで書き換えたら、うまくいきました。

下記を参考にしました:
http://stackoverflow.com/questions/2566995/jquery-modify-hidden-form-field-value-before-submit
jQuery: modify hidden form field value before submit


posted by SDozono at 00:04| 東京 ☔| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2006年12月15日

jscalendar memory leak

最近、JavaScript のからんだWEB開発の案件には Drip ツールが手放せません。IE でメモリリークが起こっているかどうかが手に取るように分かります。

http://outofhanwell.com/ieleak/

あるメモリリークを調べていたところ、原因は jscalendar にありました。Google で "javascript calendar"とやれば出てくるほどポピュラー(?)なプロジェクトですが、このデモページでも、Drip で表示するとリークが起こっていそうです。

こちらでは1日中ブラウザを広げておくような業務アプリケーションをWEBで作成しているので、ちょっとのリークでも問題になります。ですから見過ごすわけにはいきません。

実は、これを直接読んだのではなく、phpMyEdit の extension が jscalendar を使っていたために影響を受けていました。有名なカレンダーですし、かなり豊富にあちこちのブラウザに対応しているので、選択としては妥当なものだったかもしれません。

最初は、 jscalendar のソースコードを見て、幾つかのリークを直していたのですが、だんだん時間がかかりそうなことが分かってきたため、これは jscalendar のプロジェクトソースをいじるより、phpMyEdit の新しい extension を作ったほうが早く終わるかもしれない、という気になってきました。

calpopup のエクステンションを参考にして、高橋 登史朗さんの作成された Javascript カレンダーを phpMyEdit のエクステンションとして使ってみました。(こちらは、"javascript カレンダー"と検索すると最初に出てくるページです。)
http://allabout.co.jp/internet/javascript/closeup/CU20020529/

すると、jscalendar を直そうとしていたよりもはるかに少ない労力で目標が達成できました。やはり、調子の悪いものを修理して使おうとするよりは、新たに書いてしまったほうがよいようです。それにしても、高橋さんのカレンダーは、jscalendar と比べてかなりソースもコンパクトなのに、きっちり動きます。また、リークもまったくありません。

今後はもう phpMyEdit ではなくて、CakePHP 一つにしようと思わせる出来事でした。あとは、「何で JavaScript で、インタプリタでメモリリークが起こってしまうの……」と。
ラベル:drip javascript
posted by SDozono at 00:33| 東京 ☔| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2006年12月03日

download the fixed mm_menu.js, a built-in pop-up menu JavaScript of Dreamweaver & Fireworks

mm_menu.js is a JavaScript code for built-in pop-up menu of Dreamweaver and Fireworks. And it is a opensource program.

/**
* mm_menu 20MAR2002 Version 6.0
* Andy Finnell, March 2002
* Copyright (c) 2000-2002 Macromedia, Inc.
*
* based on menu.js
* by gary smith, July 1997
* Copyright (c) 1997-1999 Netscape Communications Corp.
*
* Netscape grants you a royalty free license to use or modify this
* software provided that this copyright notice appears on all copies.
* This software is provided "AS IS," without a warranty of any kind.
*/

If you open this menu with Internet Explorer, you might notice that IE continually consumes your PC's memory, and finally, there will be no response.
(If you close the IE, all the memory will be backed to the Windows OS.)

After spending some hours to examine the mm_menu.js, finally, the memory leak problem was soleved!

reference:
Understanding and Solving Internet Explorer Leak Patterns

The problem was just a one line:

l.Menu.menuItemLayers[l.Menu.menuItemLayers.length] = l;

How to solve?

Change:

Line 324:
//l.Menu.menuItemLayers[l.Menu.menuItemLayers.length] = l;
l.Menu.menuItemLayers[l.Menu.menuItemLayers.length] = “menuItem” + menuCount;

and,

Line 650:
//var itemLayer = theLayer.Menu.menuItemLayers[j];
var itemLayer = FIND(theLayer.Menu.menuItemLayers[j]);

If you'd like to download, get it from here:
mm_menu_memoryleak_fixed.zip

If you want to solve a problem of mm_menu.js + iFrame, you can use this: (However, you might have to change some code..)
mm_menu_memleakfixed_and_sim.zip

I tested with Drip memory leak tool.

Original mm_menu.js:
leaked.PNG

Fixed mm_menu.js:
fixed.PNG

posted by SDozono at 13:37| 東京 ☀| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする
WebとCTI、VoIP技術の高みを目指して - 技術者の24時間
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。