代码之家  ›  专栏  ›  技术社区  ›  Sri

在ajax错误时停止回发

  •  0
  • Sri  · 技术社区  · 11 年前

    我有一个同时包含onclick和onclientclick事件的asp按钮。onclientclick,它调用一个js函数来保存。如果保存有任何错误,我想停止onclick事件。我尝试了e.preventdefault(),e.stopPropagation(),返回false。似乎什么都不起作用。这是我的密码: 按钮:

    <asp:Button ID="btnAddNewAddr" runat="server" onclick="btnAddNewAddr_Click" OnClientClick="SaveLocAddress();" class="btn btn-primary" 
                Text="Save Address" UseSubmitBehavior="false" />
    

    js保存方法:

    function SaveLocAddress(e) {
        if (validaddr) {
                $.ajax({
                    type: "post",
                    async: false,
                    contentType: "application/json; charset=utf-8",
                    dataType: "JSON",
                    url: "/Pages/Location/Search.aspx/SaveLocationAddress",
                    data: "{ addrDTO: " + JSON.stringify(`addrToSave`) + "}",
                    success: function (xhr, ts, error) {
                        AlertAddrSuccess(id);
                    },
                    error: function () {
                        console.log('error');
                        AlertAddrError();
                        e.stopPropogation();
    
                    },
                    complete: function () {
                        if ($('#alertAddressError').text() != "")
                            return false;
                    }
                });
            }
    }
    
    1 回复  |  直到 11 年前
        1
  •  0
  •   David    11 年前

    AJAX运行 异步地 。所以这里发生了两件事:

    1. 事件在回调处理程序被调用之前(在AJAX调用发出响应之前)就已经传播了。
    2. 回调处理程序未附加到 SaveLocAddress 当它们被调用时 return 声明没有任何作用。

    这可能需要一点重新设计。也许有两个按钮?其中之一就是 asp:Button 但是被设计为不可见。另一个是正常的 button 它具有您希望按钮具有的文本/样式。事件的顺序为:

    1. 用户单击HTML按钮
    2. JavaScript按钮处理程序调用AJAX调用
    3. 根据AJAX响应,它会触发 click 隐藏按钮上的事件。

    这是一种变通的做事方式,但这就是适合你的WebForms。可能是这样的:

    <asp:Button ID="btnAddNewAddr" runat="server" onclick="btnAddNewAddr_Click" class="btn btn-primary invisible" UseSubmitBehavior="false" />
    <input type="button" class="btn btn-primary" value="Save Address" onclick="SaveLocAddress();" />
    

    然后,在您想要调用post-back功能的JavaScript代码中,您可以执行以下操作:

    $('#<%= btnAddNewAddr.ClientID %>').trigger('click');
    

    这将触发 点击 上的事件 asp:button 就好像用户点击了它一样。