著作一覧 |
いろいろ事情があって、onsubmitの時にバリデーションがOKだったらプログレスバーみたいなのを実装したくなったとする。なかなか結果が返ってこない時に動いているよを嘘でも表示する必要があるのだ。
で、MSDN読むんだけどクライアントスクリプトによるonsubmitへの介入方法がわからん。ButtonクラスのOnClientClickってのはあるのでそれにfoo();とか設定してみると、
onclick="foo();return asp_net_generated_bar_baz_bang();"
みたいになる。いや、おれはバリデーションの結果の動作を知りたいのだよ。で、生成されたHTMLをしげしげと眺めるとformのonsubmitが設定されているのがわかる。こいつが真を返した時にfoo()すりゃいいのだな。foo()は、おおざっぱには
var pos = 10; var bias = 3; function foo() { setInterval(function() { document.getElementById("progressBarNoTsumori").style.width = pos + 'px'; pos += bias; if (pos > MAX_WIDTH) { bias = -3; pos = MAX_WIDTH; } else if (pos < 10) { bias = 3; pos = 10; } }, 500); }
みたいなやつ。div要素を伸び縮みさせてプログレスバー代わりにとりあえずしとけみたいなハック(やっつけ仕事)。
さらにしげしげとHTMLを眺めてbodyのonloadとonunloadが未定義なのに気づいた。
function setupProgressbar() { var org = document.getElementById('form').onsubmit; document.getElementById('form').onsubmit = function() { if (org()) { foo(); return true; } return false; }; } <body onload="setupProgressbar();" onunload="インターバルのクリア">
で、JavaScriptでは関数はファーストクラスオブジェクトだというのは、こういうことなのだな、と感じるのであった。
もちろんASP.NETならではのまっとうな方法もあると思うので、方法のご指摘は歓迎です。
おもしろかった。感想を書くより、ちょっとMonoをまじめに見ることにしようと思った。あとMVMのお話とかOSGIとか、知らないおもしろい世界がいろいろあるのだなぁとか。
html-section. 01 html. 03 body. 05 table. 07 TR occurs 30 times index by item-index. 11 td-name escaped X(10). 11 td-price pic ZZZZZZZ9. 11 td-quantity pic ZZZZZZZ9. ... set-item. set item-index to 1. move record-name to td-name. move record-price to td-price. move record-quantity to td-quantity. if reocrd is not eof then set item-index up to 1 set record-index up to 1 goto set-item end. exit-set-item. ...
(最初、全部大文字で書いたがあまりに読みにくいので全部小文字に変えてみたが、するとおもむきがなくなってしまった。微妙な言語であるな)
『COBOLとRails』で、前田さんが(たぶん)書かれているが、なんでもできるプログラミング言語の中に簡素化して書くための仕組みが埋め込まれているものと、簡素化して書くことしかできないものの差はありますね(もちろん、callするものはCなどで書けるので「しかできない」は正しくないし、頑張ればできなくもないけど――bitで別の前田さんがCOBOLで再帰を書いたというようなことをコラムで書いていたのを読んだ覚えがある、でも全然やりかたはわからなかった、index付けされたレコードをスタックがわりに使ってperformするときに回すのかなぁ――想定外な使い方には無理がある)。
前者は公園の中の砂場とか砂漠の中のオアシスで外へ出るのも内へ入るもその人の選択にかかっているけど、後者は高い塀で囲まれた砂場(しかも猫が住んでいるのでへたに掘るとこわい)とか人工芝で覆われた中庭(建物への入り口には鍵がかかっていて一応ワイヤーハンガーが置いてある)で、同じことをやるのでも、使っていいよと言われて使うのと、これだけ使えと言われて使うのは、そりゃ違うよな、ということでしょう。そこに差がある。
ジェズイットを見習え |
そうそう、Railsでwhyのsandbox使うようになって…なんてことはありそうにないですよね。
それは辛い