【问题标题】:How can I set a value in a jquery dialog that is defined the first time the dialog closes?如何在第一次关闭对话框时定义的 jquery 对话框中设置值?
【发布时间】:2015-04-21 17:33:13
【问题描述】:

我只是想找到一种在 jquery 中创建确认对话框的方法,以代替 javascript 中的默认确认功能。我有一个确认对话框,用于决定是否要在表单中没有给定值的情况下继续。整个程序在这里:

http://nowlin.com/testpop.php

让我头疼的按钮代码看起来像这样,但它可能不是按钮代码。我只是在学习jquery:

buttons: {
    'Yes': function() {
        document.getElementById("clicked").value = "true";
        creturn = true;
        $(this).dialog('close');
    },
    'No': function() {
        document.getElementById("clicked").value = "false";
        creturn = false;
        $(this).dialog('close');
    }
}

除了确认对话框外,该程序运行良好。我尝试设置一个具有全局范围(creturn)的变量,以及来自隐藏输入(clicked.value)的 DOM 元素,这样当对话框关闭时,我就可以知道选择了哪个按钮。两个值都被设置,但直到第二次点击 onclick 事件所在的表单发送按钮之后:

<button type=submit name=clicked value=true onclick='return chkreq("cfbform")'>Send</button>

行为是,如果您输入电子邮件地址但没有姓名,然后点击“发送”按钮,则会弹出确认对话框。如果您选择是,对话框将关闭,但不会提交表单。如果您再次单击“发送”按钮,对话框会再次弹出,并立即自行关闭,并提交表单。显然我错过了一些东西。

感谢您提供任何见解。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    我会将按钮从 type=submit 切换到 type=button(我们也可以放弃返回)

    <button type=button name=clicked value=true onclick='chkreq("cfbform")'>Send</button>
    

    然后在通过验证时使用jQuery提交表单。

    function chkreq(fid) {
    // both values are set return true
        if (document.getElementById(fid).elements.namedItem("name").value.length > 0 &&
            document.getElementById(fid).elements.namedItem("email").value.length > 0) {
            document.getElementById("clicked").value = "true";
            $('#' + fid).submit();
        }
    
        ...
    }
    

    buttons: {
        'Yes': function() {
            document.getElementById("clicked").value = "true";
            $('#' + fid).submit();
            $(this).dialog('close');
        },
        'No': function() {
            document.getElementById("clicked").value = "false";
            creturn = false;
            $(this).dialog('close');
        }
    } 
    

    欲了解更多信息,请参阅https://api.jquery.com/submit/

    该页面上使用的另一个选项是绑定到提交事件。通过弹出窗口进行可覆盖的验证,我认为上面的代码将更容易实现。

    【讨论】:

    • 很好的答案。你提供了我错过的那块拼图。当我点击是时,我可以得到确认对话框来提交表单。事实上,我已经把它注释掉了。问题出在按钮类型按钮上,检查不需要调用确认对话框的必填字段,当它返回 true 时不会提交表单。实际上,在检查功能中明确提交表单就可以了。非常感谢。
    【解决方案2】:

    使用提交按钮并将单击事件绑定到它们并在 jQuery 中处理单击可能会导致问题,例如您的 jquery 被调用,然后由于提交而调用 post pack。 我建议将按钮的类型从“提交”更改为“按钮”并尝试一下。

    【讨论】:

    • 我曾尝试使用只是一个按钮的按钮,但是当我单击发送时,由于未提交表单,因此什么也没有发生。但是,这很接近,因为提交按钮的干扰似乎是问题的一部分。谢谢。
    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多