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. 确保当用户单击删除按钮时出现确认窗口,并且仅在他们确认删除时才继续?

谢谢

乔恩

编辑

我刚刚想到的一个想法是让所有按钮都不会在返回时提交回来,并在一些 JQuery 中挂钩以侦听 Return 并为我想要的按钮执行提交,(不知道如何直接做到这一点不过)。

4

1 回答 1

3

这里发生的是,当您在按钮中设置 UseSubmitBehavior="true" 时,按钮将呈现为 . 这使用了在按下回车按钮时提交表单的浏览器默认行为。但是如果你设置 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 回答