1

asp.net(2.0)ページにコントロールが埋め込まれています。コントロールがページ上にある場合、ページ上ではなく、リターンキーを押してコントロールに対してアクションを実行するときのデフォルトの動作が必要です。この目的のために、私はその設定を見つけました

UseSubmitBehaviour="false"

ページのボタンでうまくいきました。これは、ページのこのボタンがクリックされたときに確認ウィンドウを表示する必要があるまでは問題ありませんでした。そのボタンを押すと、システムからレコードが完全に削除され、正しいボタンをクリックしていることを確認したいと考えています。ボタンは次のようになります。

<asp:Button runat="server" ID="btnDeleteCollationResultstop" Text="Delete Selected" UseSubmitBehavior="true"
ToolTip="Delete all the selected items in the Collation tool"  OnClick="btnDeleteCollationResults_Click" 
OnClientClick="return confirm('Are you sure you wish to Delete the selected Item(s)?');" />

UseSubmitBehaviour設定すると、ポップアップ確認ウィンドウが読み込まれて機能しますtrueが、リターンキーを押すと削除ボタンが表示されますが、これも本当に必要ありません。

だから私の質問は、どうすればそれを次のようにすることができますか?

  1. リターンキーのデフォルトのアクションを実行して、それが含まれているページではなく、自分のコントロールで起動します

  2. ユーザーが削除ボタンをクリックしたときに確認ウィンドウが表示され、削除を確認した場合にのみ続行することを確認しますか?

ありがとう

ジョン

編集

私がちょうど持っていたアイデアの1つは、どのボタンもリターン時にサブミットしないようにし、JQueryをフックしてリターンをリッスンし、必要なボタンのサブミットを実行することです(これをまっすぐに行う方法がわかりません)離れて)。

4

1 に答える 1

3

ここで起こっていることは、ボタンにUseSubmitBehavior = "true"を設定すると、ボタンがとしてレンダリングされることです。これは、Enterボタンが押されたときにフォームを送信するというブラウザのデフォルトの動作を使用します。ただし、UseSubmitBehavior = "false"を設定した場合、ボタンは;としてレンダリングされます。また、(クライアント内の)onclickイベントは、フォームを送信する「__doPostBack()」に接続されます。

問題は、OnClientClickプロパティに何かを追加すると、__ doPostBack()の前に実行されることです。trueまたはfalseを返すと、値が返されたため、onclickイベントの処理が終了し、__ doPostBack()が発生することはありません。レンダリングされたタグは次のようになります。

<input type="button" name="button1" value="Click Me" onclick="return confirm('are you sure?');__doPostBack('button1','')" id="button1" />

AjaxControlToolkitには、これを使用したい場合にこれを機能させるコントロールがあります。これは、ConfirmButtonコントロール(http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ConfirmButton/ConfirmButton.aspx)です。

jQueryを使用したい場合は、ConfirmButtonコントロールと基本的に同じことを行う例を次に示します。

ボタンは次のようになります(必ずOnClientClickプロパティを削除してください)。

<asp:Button ID="button1" runat="server" Text="Click Me" UseSubmitBehavior="false" onclick="button1_Click" />

そして、JavaScriptコードは次のとおりです。

<script type="text/javascript">
    $(function() {
        var btn = $('#<%= button1.ClientID %>');
        var oldScript = btn.attr('onclick');
        btn.attr('onclick', '');
        btn.click(function() {
            if (confirm('click a button.')) {
                if (oldScript) {
                    if ($.isFunction(oldScript)) {
                        oldScript();
                    } else {
                        eval(oldScript);
                    }
                }
                return true;
            } else {
                return false;
            }
        });
    });
</script>

基本的に、これは現在の「onclick」属性値を削除し、それを一時変数に格納します。次に、確認を「クリック」イベントに接続します。確認がtrueを返す場合、元々「onclick」にあった古いスクリプトを実行します。確認がfalseを返した場合、他には何も起こりません。

于 2010-01-28T20:29:18.873 に答える