現在asp.netで開発しています。登録処理を行う場合に確認ダイアログを表示してエンターキーを連打すると登録が複数回行われて困っています。色々調べましたが解決方法が見つかりません。なにか解決方法はないでしょうか?
下記のreturn confrimはjavascript側から実装しても、コードビハインドしたc#側から実装しても同じようにエンター連打が可能です。
javascript
1コード 2 3return confrim("登録しますか?"); 4
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/17 03:29
回答2件
0
登録ボタンのonclientclickに下記のsampleを適用します。
javascript
1コード 2 3function sleep(a){ 4 var dt1 = new Date().getTime(); 5 var dt2 = new Date().getTime(); 6 while (dt2 < dt1 + a){ 7 dt2 = new Date().getTime(); 8 } 9 return; 10} 11 12function sample() { 13 ver result = confirm("登録しますか?"); 14 15 if (result == true) { 16 17 sleep(1000); 18 19 alert("登録中です"); 20 21 return true; 22 } else if (result == false) { 23 return false; 24 } 25} 26
投稿2020/12/23 00:41
総合スコア20
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/23 01:17
0
ベストアンサー
質問者さんはどこかに行ってしまったようですが・・・
質問のコメント欄に、
普通に考えて「エンターキーを連打すると登録が複数回行われ」ということはないはずなので。
と書きましたが、普通に書いたらそういうことはないというコード例を書いておきます。質問者さんがまだこのスレッドを見ていたら、質問者さんのコードとどう違うのかコメント欄に書いてください。
.aspx ファイル
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm14.aspx.cs" Inherits="WebApplication1.WebForm14" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="登録" OnClientClick='return confirm("登録しますか?");' /> <br /> 登録回数: <asp:Label ID="Label1" runat="server"></asp:Label> </div> </form> </body> </html>
.aspx.cs ファイル
Enter キーを連打しても「登録が複数回行われ」ということはない(=複数回ポストバックされることはない)ということが分かるように、ポストバックされた回数を Label に表示するようにしています。
using System; namespace WebApplication1 { public partial class WebForm14 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int count = 0; if (ViewState["COUNT"] != null) { count = (int)ViewState["COUNT"]; count++; ViewState["COUNT"] = count; } else { ViewState["COUNT"] = count; } Label1.Text = count.ToString(); } } }
上のコードを実行すると、初期画面では以下のようになります。
上の初期画面から、[登録]ボタンをクリックするか、テキストボックスまたは[登録]ボタンにフォーカスがある時 Enter キーを押すとポストバック(form を submit)しようとします。その時[登録]ボタンの click 属性に設定した JavaScript の return confirm("登録しますか?") が動いて以下のようになります(画像のブラウザは Chrome です)。
この時フォーカスは confirm で表示されたダイアログの [OK] ボタンに当たっていますので、Enter キーを押すと confirm("登録しますか?") は true を返すのでポストバックされ、.aspx.cs ファイルのコードで ViewState["COUNT"] のカウント数が一つ増えてそれが Label に表示されます。
Enter を連打しても Label に表示されるカウント数は一つ増えるだけです。ポストバックされて再描画された画面ではフォーカスはテキストボックスやボタンには当たってませんので、Enter を連打しても無反応です。
想像ですが、質問者さんのケースでは、ポストバックされて再描画される際にテキストボックスかボタンにフォーカスが当たる設定になっていませんか?
投稿2020/12/20 03:05
編集2020/12/21 01:08退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/21 00:17
退会済みユーザー
2020/12/22 04:09
2020/12/22 12:46
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。