jsで、継続サーバっぽい動作をする何か Backボタン対応版
id:Gemma:20070802 の続きです。YUIを使って実現しました。IEとFirefoxで動作確認しました。
http://eva-lu-ator.net/~gemma/geocities/jscont/sum.html
こうなります。
// q0 :: unit -> Hash function q0() { var a = { x: $('x').value }; return $H(a); }; // q1 :: unit -> Hash function q1() { var a = { y: $('y').value }; return $H(a); }; // main :: unit -> IO () function main() { show($div($h1('? + ? = ?'), 'please input number',$br(), $form({action: 'javascript:' + action(q0, function(query) { var x = query['x']; show($div($h1(x + ' + ? = ?'), 'please input number',$br(), $form({action: 'javascript:' + action(q1, function(query) { var y = query['y']; show($h1(x + ' + ' + y + ' = ' + (parseInt(x,10) + parseInt(y,10)))) })}, $input({id: 'y'}),$br(), $input({type: 'submit'})))); })}, $input({id:'x'}),$br(), $input({type: 'submit'})))); };
<body> <script> YAHOO.util.History.register('kurl', '0', function(state) { do_action(Number(state)); } ); YAHOO.util.History.onLoadEvent.subscribe(function() { cont_table = new Array(); q_table = new Array(); action(function() {return $H({})}, main); do_action(0); } ); YAHOO.util.History.initialize(); </script> <div id="main">Please enable the javascript.</div> </body>
関数q0,q1は、formタグのsubmitボタンを押したときにブラウザがどんなクエリパラメータを送るかを、javascriptでエミュレートしています。
イマイチなんで、もっといい方法があれば・・・。
q0,q1を自動生成するロジックを、DOMでformタグの中を検査してinputタグを見つけて云々すれば、書けそうですけど、それはちょっと。