为什么asp:LinkButton服务器端事件没有'当clientClick返回true时,t激发

Why is asp:LinkButton server side event doesn't fire when clientClick returns true

本文关键字:返回 clientClick true 激发 LinkButton asp 服务器端 事件 为什么      更新时间:2023-09-26

我有带LinkButton的asp:GridView:

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="Cancel"  runat="server" OnClick="Cancel_Click" OnClientClick="return confirmCancel(this);">cancel</asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

我希望服务器端事件仅在confirmCancel返回true时发生
但我有一个奇怪的问题:

如果函数显式返回true-

return true;

事件发生。

如果函数显式返回false-

return false;  

则该事件不会发生。

但如果函数返回的变量为真或假-

return x;  

事件无论如何都不会发生。

我放了调试器,发现x的值是true或false,而不是未定义的
问题出在哪里?

confirmCancel:

function confirmCancel(sender) {
        var msg = "are you sure you want to cancel?"
        var x = myConfirm(msg, sender);
        return x;
}

myConfirm:

function myConfirm(msg, sender) {
            if ($('#myConfirm').hasClass("hide")) {
                $('#myConfirm').removeClass("hide");
                $('#myConfirm p').text(msg);
                $("#myConfirm input#btn-ok").unbind("click").click(function () {
                    $(sender).click();
                    return false;
                });
                return false;
            }
            else {
                $('#alertify').addClass("hide");
                return true;
            }                
        }

我该怎么解决?

您可以使用一种变通方法,直到发现问题:

function confirmCancel(sender) {
        var msg = "are you sure you want to cancel?"
        var x = myConfirm(msg, sender);
        if (x == true)
        {
             return true;
        }
        else
        {
            return false;
        }
}