8

我在这里有一个特殊的问题,我无法通过我的生活弄清楚解决方案是什么。请注意,以下代码不是动态创建的,而是立即在我的aspx文件中创建的。

<button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?');">
    Submit
</button>

只要我没有onclick属性,它就可以正常工作,即OnServerClick处理程序按应有的方式被触发。但是当我使用该onclick属性时,无论我是确认还是拒绝确认对话框都不是。

我究竟做错了什么?谢谢

4

8 回答 8

15

如果您查看生成的源代码,您将看到以下内容:

onclick="return confirm('Sure?'); __doPostBack('btnSubmit','')"

所以发生的事情是永远不会调用 _doPostBack。做你正在寻找的东西的hacky方法如下:

<button type="button" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="if (confirm('Sure?')) ">

真正正确的方法是使用 Web 控件:

<asp:Button runat="server"
        OnClick="btnSubmit_Click" OnClientClick="return confirm('Sure?')" Text="Submit" />
于 2009-08-07T14:41:18.260 回答
3

我取得了更大的成功

<asp:Button ID="btnSubmit" runat="server" Text="Save" UseSubmitBehaviour="false"
OnClick="btnSubmit_Click" OnClientClick="if (!confirm('Sure?')) return" />
于 2010-01-18T07:07:52.547 回答
3

接受的答案并不完美。如果你不使用type="button",即使你点击了取消,网页也会做回发。正确和最简单的方法是利用短路评估并执行此 hack:替换;&& !,如下所示。

<button runat="server" id="btnSubmit"
        OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?') && !">

输出将如下所示:

<button id="btnSubmit"
        onclick="return confirm('Sure?') && ! __doPostBack('btnSubmit','')">

它给出了正确的返回值,因为true && !undefined将返回true并将undefined被评估,并且false && !undefined将返回false并且undefined不会被评估,这正是我们想要的。

于 2014-04-18T11:35:49.057 回答
1

chaging 按钮的类型如何提交,效果很好:

<button type="submit" runat="server" id="btnSubmit"
  OnServerClick="btnSubmit_Click" onclick="return confirm('Sure?');">
    Submit
</button>
于 2009-08-07T14:47:25.567 回答
1

听起来 onclick 事件没有冒泡。

你应该可以使用

OnClientClick="return confirm('Sure?');

我不认为其他 onClick 应该是必要的。

编辑:

此方法需要您手动将函数挂钩到 OnClick 事件。


今天早上我正在编造属性,所以徒劳地赎回自己-

另一种方法是插入 javascript 来捕获事件。就像是..

$("form").submit(function() {

        var resp = confirm("Save & Submit?");
        if (resp) {
            serializeStats();
            return true;
        }
        else {
            return false;
        }

    });

我确实记得有一种更好的内联方式来做到这一点。现在是咖啡因时间。

于 2009-08-07T14:37:42.320 回答
1

尝试这个:

<button type="button" runat="server" id="btnSubmit"
OnServerClick="btnSubmit_Click" onclick="if(!confirm('Sure?')) return;">
Submit
</button>
于 2015-10-20T19:19:36.367 回答
0

<button> 是一个 HtmlButton 控件,其中 OnServerClick 是唯一的服务器端单击事件。OnClick 无法被 ASP.NET 识别,因此它会完整地传递给客户端,以防您希望在回发之前执行一些客户端 JavaScript 代码。

< asp:button> 是一个 WebControl,它通过 OnClick 服务器端事件和 OnClientClick 为客户端完成同样的事情。

我认为你得到了你看到的行为,因为你的 confirm('sure?') 返回 false 停止回发机制。这可以解释为什么当您没有 onclick 时它会起作用。

于 2009-08-07T14:44:32.480 回答
0

前端站点

  <button  id="submit1" runat="server"  
              onclick="if(confirm('Sure?')) { } else{ return false} ;"    
              onserverclick="submit_ServerClick"  >save</button>

返回网站

protected void submit_ServerClick(object sender, EventArgs e)
{
}
于 2018-07-25T05:49:02.653 回答