【问题标题】:jQuery replacement for javascript confirmjQuery 替换 javascript 确认
【发布时间】:2011-06-05 07:04:42
【问题描述】:

假设我想在允许用户保存记录之前提示用户。因此,假设我在标记中定义了以下按钮:

<asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click"></asp:Button>

要强制使用普通 javascript 进行提示,我可以为我的保存按钮连接 OnClick 事件,使其类似于这样(我可以在 Page_Load 中执行此操作):

btnSave.Attributes.Add("onclick",
    "return confirm('are you sure you want to save?');");

确认调用将阻塞,直到用户实际按下是/否按钮之一,这是我想要的行为。如果用户按下“是”,那么我的btnSave_OnClick 方法将被调用。

对于等效的 jquery 对话框,我尝试了类似的方法(见下文)。但问题是,与 javascript confirm() 不同,它会一直通过这个函数 (displayYesNoAlert),然后在 C# 端进入我的 btnSave_OnClick 方法。我需要一种方法让它“阻塞”,直到用户按下是或否按钮,然后返回 true 或 false,以便根据用户的回答调用或不调用 btnSave_OnClick。

目前,我只是放弃并使用了javascript的确认,我只是想知道是否有办法做到这一点。

function displayYesNoAlert(msg, closeFunction) {
    dialogResult = false;

    // create the dialog if it hasn't been instantiated
    if (!$("#dialog-modal").dialog('isOpen') !== true) {

        // add a div to the DOM that will store our message
        $("<div id=\"dialog-modal\" style='text-align: left;' title='Alert!'>").appendTo("body");

        $("#dialog-modal").html(msg).dialog({
            resizable: true,
            modal: true,
            position: [300, 200],
            buttons: {
                'Yes': function () {
                    dialogResult = true;
                    $(this).dialog("close");
                },
                'No': function () {
                    dialogResult = false;
                    $(this).dialog("close");
                }
            },
            close: function () {
                if (closeFunction !== undefined) {
                    closeFunction();
                }
            }
        });
    }
    $("#dialog-modal").html(msg).dialog('open');

}

【问题讨论】:

  • 这很棒,也是我正在寻找的。但是,我的 javascript 确认为消息提取了一个字符串。如何将其附加到div? var where_to_coupon = 确认(pm_info_msg_013);

标签: asp.net jquery confirm


【解决方案1】:

如果您只需要一个最终确认框,然后再转到 SAVE 等最终代码,那么这肯定有助于在按钮单击的回调函数中调用 SAVE() 函数。没关系。

我确实有另一个问题如下: 我想在表单验证中使用这个自定义确认框,其中可能有多个案例和场景需要一个接一个地进行确认。

如果用户对第一个确认框说“是”,我们希望根据表单数据条件显示第二个确认框。

如果用户再次对第二个确认框说“是”,那么我们可能需要出示下一个确认框。 这就是问题所在,在这些情况下还不可能......

【讨论】:

    【解决方案2】:

    这可以像使用您当前的“保存”按钮触发确认对话框一样简单,然后在确认对话框中使用“是”按钮触发“btnSave_Click”事件

    我想我起初误解了这个问题......这可能对你有一些帮助,虽然我没有测试过。 http://tutorialzine.com/2010/12/better-confirm-box-jquery-css3/

    【讨论】:

    • @stephen776 - 我正在尝试消除确认调用并将其替换为 jquery 对话框(请参阅问题标题)。
    • @dcp 是的,我建议让您的“保存”按钮打开模态对话框...然后将模态对话框中的“是”按钮连接到后面代码中的“btnSave_click”事件。 “否”按钮只会关闭模式对话框
    • @stephen776 - “将模式对话框中的“是”按钮连接到后面代码中的“btnSave_click”事件。”这是我不知道该怎么做的部分,你能提供一个例子吗?
    • 我添加了一篇文章的链接,可能对您有帮助
    • @stephen776 - 是的,我看到了那个链接,但感谢您发布它。我想我希望有一种更简单的方法,但似乎没有。再次感谢。
    【解决方案3】:

    我使用了一个回调函数,当他们单击“是”等特定按钮时会引发该函数。您将无法在脚本中阻止执行,但也可以让 UI 响应用户操作。

    【讨论】:

    • 是的,我知道我可以使用回调函数,请参阅上面的 displayYesNoAlert 函数的“是”部分。但这并不是我真正需要的行为,因为如果用户对对话框响应“是”,我希望我的 btnSave_Click 被称为服务器端。
    • 你能不能只复制按钮用来引发回发并在回调中执行的脚本?最坏的情况,隐藏“真正的”提交按钮,并让使用对话框的假提交按钮可见,这反过来会执行 $('btnSave').click();我以前以编程方式在客户端执行过回发,但我不记得如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多