disableSubmitとは?/ キャッシュワン
[ 10] onsubmit で disable にするやつ
[引用サイト] http://espion.just-size.jp/archives/05/220233057.html
あるスクリプトに埋め込んでみたら、フォームの「戻る」ボタン(ブラウザのじゃなくてフォーム内の)が効かなくなってしまいました。 上のスクリプトは、既に遅延実行型の動作(1ミリ秒後に実行)になってると思うので、何か別の不具合の気がします。 どうも元からあるハンドラが入力データチェックをしていて、その処理のためにタイミングがずれたようです。 つまり、一度グレイになってからまた元に戻るのを見たら、「何か処理をしてそれが終わった」かのようにも見えてしまうようで、それでも画面全体の様子には変化がないため、何か失敗したのかな?と、もう一度クリックしてしまう、というケースが多いようです。 ようするに、送信後の待ち状態なのか、キャンセルしたのか、などが判る方法、と言いたかったのでした^^; サブミット時に別途画像の読み込みを開始させて、中止ボタンが押されたら「画像の読み込みキャンセル」でイベントをつかまえよう、とか、中止ボタンが押されるとアニメーションが止まるので定期的にチェックしてはどうか、などなど試してみましたが、お察しのとおりどれもダメ…、画像読み込みなんてそもそも画像のサイズに依存するので愚策もいいところ…。 おそらくほとんどすべての状況で、ごく普通のフォームでサブミットボタンを押すと(よほどの通信障害とかない限り)フォームデータの「送信」自体は一瞬にして完了し、そしてその後サーバーからの応答を待つ状態になります。 中止ボタンが押されるのは、この待機中のことで、つまり送信はすでに完了しているわけで(通常httpdは処理している)、この時点で中止ボタンを押してから復活したサブミットボタンを再び押されてしまうということは、これは二重送信に他ならない、ということなんですね。 ですから、このケースでは、たとえ中止ボタンを押そうが、もう一度サブミットボタンを押されては困る、したがってボタンを復活させてはいけないのでは、と考えました。 その場合困ることといえば、画面遷移ですよね。本来見るはずの「結果画面」が表示されない、そこで、何らかの方法で代替の、たとえば結果を確認できるページへのリンクを用意しておくとか、対応はできると思います。 若干の不自然さや面倒はあるものの、中止ボタンが押されることはあまり多くないことと、二重送信されてしまうことの弊害に比べたらマシ、とも考えられます。 中止ボタンによって、本当に送信自体が中止されるケースももちろんあると思います。ただし、ファイルアップロードなど何らかの巨大データを含むフォームに限られます。 このケースは、中止されたらやはり復活させる必要がありますよね。しかしずっと話されているようにこれが難しいわけで…。 2のようなケースでは、もし完全を求めるならもはやクライアント側だけでは不可能なので、もしやるなら、たとえばフォーム表示時にユニークなIDをhiddenフィールドに入れておいて、サーバー側でこれを見て二重送信を判別する、など…。 |
[ 11] 小粋空間: コメント投稿時にフォームボタンをグレーアウトする for Movable Type
[引用サイト] http://www.koikikukan.com/archives/2007/02/19-031721.php
本サイトで適用している、コメントを投稿時にフォームボタンをグレーアウトするためのカスタマイズです。カスタマイズ方法については以前よりリクエストを頂いておりました。公開が遅くなって申し訳ありません。 「確認」ボタンクリック時にグレーアウトしないのは、下記の理由のようにユーザビリティ上好ましくないと思ったためです。 コメント・プレビュー画面に本カスタマイズを適用する場合、コメント・プレビュー・テンプレートに必ず下記のタグ(青色部分)をフォームに追加してください。これを追加しないとグレーアウトしません。 このブログは重複トラックバック防止プラグインにより、同一エントリーに対する同一のトラックバックは登録されないようにしています(記事のタイトルまたは記事の概要が異なる場合は登録されます)。 カスタマイズ内容につきましては TypeKey に依存するものではありませんので、サイン・インの有無にかかわらず同じ振る舞いになると思います。 サイトの方はカスタマイズを外されているようでしたので設置されている状態で再度ご連絡頂ければ幸いです。 ちなみに当方では複数のユーザーに各カテゴリーのエントリー投稿をしてもらい、コンテンツを運営しているのですが、時として投稿者がついうっかりして投稿ボタンをダブルクリックすることがあるようで、先日DBにて運営していたMTのデータベースが壊れてしまい再構築できなくなってしまう事態を経験しました。 投稿ボタンをダブルクリックして二重ポストしたことがデータベースの破損の一番の原因なのかは定かではありませんが、できれば「新規エントリー画面」とそのエントリーの「確認画面」からの投稿ボタンのグレーアウト方法について記事にしていただけないでしょうか? コメント時の二重ポスト防止のこの手法を流用すればよいのかなっと安易に思ってみたりもしましたがなんとなく違うような気もしたり・・・。 ご要望の件、承りました。実験して、うまく動作するようであればエントリーしたいと思います。なおMTのバージョンは3.xという認識です。 ビジネスシーンでもCMSとして利用されている方(企業)も多いと思われますので、きっと、重宝されると思います。お手数をおかけ致しますが何卒、よろしくお願い致します。 お知らせ:2008年5月現在、多忙のため、7月頃までコメントを速やかに回答できない状態が続きます。ご質問の内容によっては回答が7月以降になる可能性がありますので、予めご了承ください。 コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。 |
キャッシュワンのサイトです。