我在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
,则弹出确认窗口会加载并运行,但是返回键会触发删除按钮,这也是我真的不想要的。
所以我的问题是我如何才能做到以下几点:
使返回键的默认操作在我的控件上触发而不是在其中的页面
确保用户点击删除按钮时出现确认窗口,只有在确认删除后才会继续?
由于
乔恩
修改
我刚才拥有的一个想法就是让所有按钮在返回时都没有提交回来,并挂钩一些JQuery来监听Return并为我想要的按钮做提交,(不知道怎么做直接做那件事。)
答案 0 :(得分: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,则不会发生任何其他事情。