Javascript 'confirm()' 取消提交回发

3
在一个asp.net 3.5页面上,我有多个文本框,在用户通过表单时在TextChanged事件上触发异步回发。在用户完成表单后,按下“提交”按钮以提交包含JavaScript“确认”对话框的表单。只要用户已经通过所有字段,一切都很正常。但是,如果用户更改了其中一个文本框的值并在退出文本框之前单击了按钮,则“onClientClick”会触发,但如果指定了“confirm”,则页面不会回发:
onClientClick = return confirm('Are you sure you want to submit?');  //Page Does Not Post

然而,从页面中移除确认会导致回发:
onClientClick = return true; //Page Posts

按钮是一个<asp:PostBackTrigger/>。文本框的<asp:AsyncPostBackTrigger/>与按钮在同一个updatepanel中。我尝试将它们移动到另一个updatepanel中,结果相同。
仅当用户更改了文本框并在单击按钮之前没有切换时才会出现此问题。切换离开文本框可以正常工作。我甚至放置了代码等待5秒钟才显示确认然后提交表单,但结果相同(除了必须等待5秒钟才能确认)。
var dt = new Date();
dt.setTime(dt.getTime() + 5000);
while (new Date().getTime() < dt.getTime());
return confirm('Are you sure you want to submit?');

有什么想法或者好的解决方法吗?谢谢您提前的帮助!

你把断点放在哪里了?是在Page_Load还是在TextChanged中? - Emanuele Greco
您是否希望在单击时无论 confirm() 的结果如何都执行 postback? - Amit Rai Sharma
@ARS 我想他只希望在“是”上进行回发,否则“确认”将永远不起作用。 - Emanuele Greco
我只想在“确定”按钮上进行提交。但是现在并没有发生这种情况。只有当文本框更改后,单击按钮,而文本框还没有被切换时才会发生。 - BFK
@greco,我的断点在button_click处理程序中。我将它移到了page_load中,它被TextBox更新命中,但我的点击(甚至是onClientClick)完全被忽略了。我猜这是一个时间问题,页面不喜欢在等待UpdatePanel响应时进行按钮点击。 - BFK
你能发布按钮的HTML代码吗? - Amit Rai Sharma
3个回答

3
这里有一种更好的方法可以解决您的问题,甚至不需要编写函数。
 <asp:Button runat="server" ID="btnSubmit" Text="Submit" OnClick="BtnSubmit_Click"
   OnClientClick="if (!confirm('Are you sure you want to Submit?')) return false;"/>

1

找到了一个解决方法。

function ConfirmSubmit(){
   if (confirm('Are you sure you want to submit?')){
      __doPostBack(btnSend, '');
   }
   return false;
}

这是按钮:

<asp:Button id='btnSend' runat='server' onClientClick='return ConfirmSubmit();' />

我遇到了这个问题很久了。一开始我反对这个想法,因为我不喜欢手动后退。然而,对于我的情况来说,这个解决方案起了作用。我将确认结果存储到一个变量中,然后根据该变量执行操作。然而,它永远不会返回到服务器。无论我尝试什么都不行。添加__doPostBack解决了这个问题。所以,在我的书里,这是一个胜利。 - Sam

0

尝试

function DummyFunction()
{
var dt = new Date();
dt.setTime(dt.getTime() + 5000);
while (new Date().getTime() < dt.getTime());
return confirm('Are you sure you want to submit?');
}

更新 onClientClick 的代码 = "var result = DummyFunction(); return result;"


谢谢,但不行。结果相同。无论我将确认框放在哪里,都会取消按钮提交。再次说明,只有在未切换更改的文本框时单击该按钮才会发生这种情况。 - BFK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接