0

私はアプライアンスのような製品の Web GUI に取り組んでいます。

私は正常に動作する HTML フォームを持っています。チェックボックス付きのリストが表示され、ユーザーはそれらのいくつかをチェックして、フォームを送信する「削除」ボタンをクリックします。サーバーは POST を取得し、アイテムを削除して、ページを更新します。大丈夫だ。

「よろしいですか?」を追加する必要があります。フォームへの確認。への呼び出しを追加すると

 confirm("are you sure?");

FORM タグの onsubmit メソッド、または送信ボタン タグの onclick として、正常に動作しますが、見苦しいブラウザー ネイティブの確認ダイアログを使用します。

製品の他の場所には、私が使用したい素敵なカスタム CSS スタイルの確認ダイアログがありますが、それは次のように機能します: 適切な場所で、

myConfirm("Confirm", "Are you sure", "Yes", "No", confirmCallback);

これにより、クリックマスクが設定され、ダイアログがカスタマイズされ、中央に配置されて表示され、FALSE が返され、フォームが送信されません。

後でユーザーが決定したときに「はい」を押すと、confirmCallback 関数が呼び出されます。もう 1 つの製品の Ajax ベースのページでは、情報を収集し、postBody を作成し、Prototype の Ajax オブジェクトを使用して投稿します。すべて問題ありません。(「いいえ」の場合、ダイアログとクリックマスクが削除され、処理が続行されます。)

純粋な HTML フォームを使用したこの単純なページには、次のような confirmCallback 関数があります。

var confirmCallback = function() {
    document.myForm.submit();
}

それはOKですが、フォームが送信されると、削除ボタンはすでにクリックされており、カスタム確認によって返された false は送信を抑制しました。代わりに、これは新しい送信と見なされ、削除ボタンは実際にはクリックされていないため、W3.org の HTML 4 標準セクション 17.13.3 に関して「成功」とは見なされません。サーバーはデータを取得しますが、削除ボタンはありません。

ここまで読んでくれてありがとう。これが私の実際の質問です。クロスブラウザの方法で、confirmCallback JavaScript 関数で、削除ボタンを起動させ、「成功」させ、残りのデータと一緒に送信するにはどうすればよいですか?

4

3 に答える 3

0

押されたボタンのふりをする隠しフィールドが必要なようです。各ボタンには名前は必要ありませんが、代わりに隠しフィールドの値を操作するための onclick イベントが必要です。

ボタンの名前がす​​べて異なる場合は、DOM メソッドを使用して隠しフィールドを追加する必要があるかもしれません。これは、すべてのブラウザーで DOM に追加されたフィールドの名前を変更できるとは思わないためです。

このソリューションが JS なしでも機能する必要がある場合は、JS ロジックをもう少しいじる (最初の DOM ツリーをさらに変更する) か、サーバー コードを変更する必要があります。「よろしいですか」という動作を応答に入れることもできます...

于 2009-09-17T11:11:51.377 に答える