2

複数の送信ボタンを持つフォームがあります。それぞれのボタンは、ユーザーがデータを保存および/またはロードする方法に関連しています。

問題は、ユーザーがフォーム内の最後の (またはその他の) 入力で Enter キーを押した場合、呼び出されたように見える送信ボタンが、フォームの上部にある「保存されたフォームの読み込み」であったことです。JavaScript を使用して戻るボタンのデフォルトを「フォームの保存」にしようとする試みはすべて無駄に思えました。まるでブラウザがすでにフォームを送信するのに忙しくて、js が干渉しないかのようでした。

最後に、FireFox 3.5 では、実際にサーバー側のスクリプトに、post変数に対して受け取った内容をエコーアウトさせ、送信ボタンの値がサーバーに返されていないことを発見しました。結局のところ、ユーザーが「保存」または「保存して印刷」などを押したときのスクリプトにフックがありますが、ユーザーが「ページの読み込み」を使用すると、変数が更新され、通常どおりページの読み込みが続行されますコンテキスト内のその変数。

したがって、送信ボタンの値がまったくなくても、同じことを行い、単にページをロードしました。

それで、大きな質問に進みます:

これは典型的なブラウザの動作ですか? 信頼できるブラウザの動作でさえありますか?Enter キーを押すと、送信ボタンがまったく押されていないかのように常にフォームが送信されますか、それともユーザーが Enter キーを押したときにデフォルトとして使用するボタンを選択するブラウザがありますか?

これが典型的な行動である場合、推奨される一連の行動は何ですか? フォームにデータがある限り、何があってもスクリプトに保存させるつもりでしたが、これはさらに危険であることに気付きました。フォームの日付とヒット「フォームの読み込み」をクリックすると、要求された新しい日付の前のフォームからフォーム データが保存されます。

サーバーが空のフォームを受信し、以前のデータを上書きしないように、ロードフォームの入力 (日付やその他の詳細を選択) を変更するとフォームがクリアされるように設定することを検討しましたが、これも危険です。多くのユーザーは確かにデータが失われたことに気付き、考えるでしょう。また、ユーザーがフォームをほぼ使い果たし、確認のために一番上に移動してフォームの読み込み選択をいじる可能性が常にわずかにあります。彼らは正しいことを選択し、最初からやり直すことを余儀なくされました。

ロード用とデータ用の 2 つのフォームが必要ですが、フォームのロード部分のすべてのデータがメイン フォームで使用されるという問題があります。送信時に 2 つを結合するため、または 2 番目のフォームのデータを非表示にするために、さらに js を作成することもできますが、それはすべて不格好に思えます。

基本的に、フォームの上部がメイン フォームから独立しているように設定する必要がありますが、その逆は必要ありません。上のフォームを送信しても下のフォームは送信されませんが、下のフォームを送信すると上のフォームが送信されます。

さて、私は十分に長く行ってきました。基本的に、解決策が既に存在するのか、それとも他の誰かがこれに遭遇して巧妙な修正を見つけたのか疑問に思っています. フォームが空でないときはいつでもフォームを保存するのはかなり賢いと思っていましたが、ユーザーがページに移動すると、日付を指定して最も適切なフォームを自動ロードし、ロード変数を変更することに気付くまではほとんどの場合、問題が発生します。


Artelius が私の注意を引くのに十分だった可能性のある重複を読んだ後でも、Enter ボタンを送信することに関するブラウザー間の一貫性についてはまだ不明です。

その質問のほとんどの人は、Enter キーを押すと最初に利用可能な送信が押されると想定していたようです。これは、フォームの上部にある別の送信ボタンを非表示にして (CSS を介して) 入力したいものを入力して達成することを友人が提案するまで、私の仮定でもありました。これで同じ結果が得られたとき、サーバーに渡されたものを最終的に確認しました (つまり、送信値に関しては何もありません)。つまり、どちらかを意味します

a)「送信ボタンなしで入力して送信する」は、一部またはすべてのブラウザーの新しい動作です。

b)「送信するだけで入力する」と「最初の送信ボタンとして入力する」は単なるブラウザの選択であり、傾向はなく、典型的なクロスブラウザの信頼性の欠如、または

if (situation1) else (assume not situation1)c) 私たちのほとんどはコードを書いているだけで、ブラウザが何をしているのか本当にわかっていないので、誰もが「最初の送信ボタンとして入力する」ことが当てはまると思い込んでいます。

私はそれが最後のものであることを非常に疑っていますが、繰り返しになりますが、私たちのほとんどがどのブラウザが何をするかを知っていることも非常に疑わしいです. 私が伝えることができるストレートな答えがあれば、私はそれが好きです.

ああ、最後に: ボタンを使用する方がはるかに簡単であることはわかっており、それを真剣に検討していますが、他のオプションも検討したいと思います。実際に私が持っている送信ボタンを減らす必要があるのは、ユーザーがいついずれかのボタンの代わりに Enter キーを押します。

実際、もう 1 秒夢中にさせてください。

私が本当に知る必要がある唯一のことは、テキスト入力の 1 つから Enter キーを押したかどうかです。それをサーバーに渡すことができれば、フォームを保存するかリロードする必要があるかがわかります。しかし、問題 (または少なくとも私が問題を抱えていたこと) は、ユーザーが入力を入力したときに、何かをキャプチャするための js の再生時間がないように見えることです。ブラウザがonclick送信ボタンをトリガーしているように、それをトリガーした実際のイベントを実際に知ることはできません。私はjqueryをもっといじってみますが、この動作は他の誰かによって観察されましたか?

4

2 に答える 2

1

私の最善のアドバイスは、送信ボタンのみを使用し、フォームの最も一般的な使用法を送信できるようにすることです。残りのボタンは、クリック イベントをフックできる通常のボタンにします。

ユーザーがEnterキーを押したときにどのボタンが「押される」かを明確にしてください。送信ボタンを最大のものにしましょう。同じように使用されるボタンが 3 つある場合は、送信ボタンをまったく使用しないでください...

編集:ほとんどのブラウザーがすべてのデータをフォーム内に投稿すると確信しています。投稿する前にデータをチェックしたい場合は、onsubmit のリスナーを追加できます。

<form onsubmit="checkData(this);" ... >

渡すthisと、実際に送信されているフォームを確認できます。

function checkData(form) {
   var formName = form.id;
   //check all the data based on which form is being submitted
}
于 2009-09-08T11:54:10.547 に答える