【问题标题】:Server click executes before user click on confirmation dialog服务器单击在用户单击确认对话框之前执行
【发布时间】:2015-04-03 17:38:29
【问题描述】:

我使用 ASP.NET

我有一些“删除”按钮可以删除用户。

<asp:LinkButton ID="lnkDeleteUser" runat="server" OnClientClick="return ValidateDeleteUser();" OnClick="lnkDeleteUser_Click" CssClass=" btn btn-primary" Text="Delete"></asp:LinkButton>

我的 ValidateDeleteUser 函数看起来像:

    function ValidateDeleteUser() {

    if ($("#hdnNewUserFlag").val() != "Update") {
        Dialogs.Alert("Please select user", null, null);
        return false;
    }

    function okCallBack() {
        return true;
    }

    function cancelCallBack() {
        return false;
    }

    if ($("#hdnNewUserFlag").val() == "Update") {
        Dialogs.Confirmation("Are you sure you want to Delete this User?", okCallBack, cancelCallBack, null);
    }
}

Dialogs.Confirmation - 是我的自定义确认对话框。

    var Dialogs = new function() {
    var todo = null;

    function getConfirmModalDialog(title, textBody) {
        // create layout of dialog
        return dialog;
    };

    function getConfirmationtDialog(title, msg, okCallBack, cancelCallBack, callBackObj) {
        var ConfirmationDialog = $('#confirm-dialog');
        if (ConfirmationDialog.length == 0) {
            ConfirmationDialog = getConfirmModalDialog(title, msg);
        } else {
            $('.modal-title', ConfirmationDialog).html(title);
            $('.modal-body', ConfirmationDialog).html(msg);
        }

        $('.ok-btn', ConfirmationDialog).unbind('click').click(function(e) {
            e.preventDefault();
            if (typeof okCallBack === "function") {
                todo = okCallBack(callBackObj);
            }
            ConfirmationDialog.modal('hide');
        });

        $('.cancel-btn', ConfirmationDialog).unbind('click').click(function(e) {
            e.preventDefault();
            if (typeof cancelCallBack === "function") {
                todo = cancelCallBack(callBackObj);
            }
            ConfirmationDialog.modal('hide');
        });

        return ConfirmationDialog;
    };

    this.Confirmation = function (dialogMsg, okCallBack, cancelCallBack, callBackObj) {
        var dlg = getConfirmationtDialog('Confirmation', dialogMsg, okCallBack, cancelCallBack, callBackObj);
        dlg.modal('show');
    };
}

我的问题是下一个:当用户单击“删除”按钮时,确认对话框打开,并且在执行此服务器端单击之后,在用户单击确认-确定按钮之前。

【问题讨论】:

  • 我没有看到return false。这就是回发发生的原因吗?
  • @naveen,你的意思是 return false; 取消点击?还是在ValidateDeleteUser 函数中?

标签: javascript jquery asp.net twitter-bootstrap


【解决方案1】:

我猜你想要做的是让他回发到服务器的对话框点上的确认按钮,而不是让链接按钮回发到服务器。

【讨论】:

  • 有点像你说的
  • 好吧,我选择了你的答案,因为我使用 ajax 进行回发
【解决方案2】:

问题是你没有像这样使用return false

if ($("#hdnNewUserFlag").val() == "Update") {
    Dialogs.Confirmation("Are you sure you want to Delete this User?", okCallBack, cancelCallBack, null);
    return false;
}

在调用Dialogs.Confirmation 时,模式会打开,按钮会变为click。但是你没有告诉你的函数 wait 等待点击事件。所以在执行完 JavaScript 代码之后,服务器端的事件就会被执行。

更新:您应该向调用 Dialogs.Confirm 的主函数返回 false。也就是说,ValidateDeleteUser 如上所述。否则主函数会return true

【讨论】:

  • 在第二种情况下,确认对话框打开后没有任何反应,但确定按钮单击后也没有任何反应(服务器端单击不运行)
  • 因为您要给e.preventDefault(); 删除它并将return true 放在代码末尾
  • 嗯,是的,这是有道理的。但我得到错误:当我用okCallBack 初始化todo 变量时,todo 的值是布尔值,但是我期望函数。我在模态隐藏事件中调用todo
猜你喜欢
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 2015-12-31
相关资源
最近更新 更多