【问题标题】:jQuery ui confirm dialog on multiple forms多个表单上的 jQuery ui 确认对话框
【发布时间】:2011-04-22 07:16:04
【问题描述】:

我在同一页面上有几个表单,我想使用相同的代码为所有表单添加一个确认对话框。它们都有一个确认表单类,并且确认对话框的标题应该是动态生成的(这在 atm 中不起作用)。

在 html 中,我有一个在页面加载时隐藏的对话框,然后在调用 dialog('open') 函数后显示。

这就是我现在拥有的,它根本不工作,对话框加载但是一旦你按下确认,它就会重复 else 子句并且不提交表单:

var deleteConfirmed = false;
$('form.confirm-form').submit(function(e) {
if ( ! deleteConfirmed)
{
    e.preventDefault();
    var title = $(this).find('input.action').val();
    var $this = $(this);
    console.log('title: ' + title);

    $('#confirm-dialog').attr('title', title);

    $('#confirm-dialog').dialog({
        buttons : {
            "Confirm" : function() {
                deleteConfirmed = true;
                $(this).dialog('close');
                $this.submit();
            },
            "Cancel" : function() {
                $(this).dialog('close');
            }
        }
    });

    $('#confirm-dialog').dialog('open');
}
else
{
    $(this).submit();
    deleteConfirmed = false;
}
});

【问题讨论】:

    标签: jquery user-interface dialog confirm


    【解决方案1】:

    编辑

    这是一种可能的解决方案。我已经在实时服务器上对其进行了测试,因为我在 jsFiddle 上遇到了一些不寻常的行为。注意:我取消了原始帖子,因为它没有解决多种表格。并且很可能表单提交将使用 AJAX 提交。

    x.html的来源

    
    <!DOCTYPE html>
    <html>
    <head><title>SO</title>
    <script
      type="text/javascript"
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
    </script>
    <script
      type="text/javascript"
      src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js">
    </script>
    <link
      rel="stylesheet"
      type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/ui-lightness/jquery-ui.css"/>
    </head>
    <body>
    
    <div id="dlg1"></div>
    <form method="post" action="/so/x.php" id="frm1" name="frm1">
        <input type="text"><br />
        <input type="submit" class="submitter_btn" id="frm1_submit">
    </form>
    <form method="post" action="/so/x.php" id="frm2" name="frm2">
        <input type="text"><br />
        <input type="submit" class="submitter_btn" id="frm2_submit">
    </form>
    <form method="post" action="/so/x.php" id="frm3" name="frm3">
        <input type="text"><br />
        <input type="submit" class="submitter_btn" id="frm3_submit">
    </form>
    
    
    <script type="text/javascript">
    var $current = { form : null, do_submit : false };
    
    $('#dlg1').dialog({
        title: "Confirmation",
        width: 300,
        height: 200,
        autoOpen: false,
        modal: true,
        buttons : {
          "Confirm" : function(e){
            $current.do_submit = true;
            $(this).dialog('close');
          },
          "Cancel"  : function(e){
             $current.do_submit = false;
             $(this).dialog('close');
          }
        }
    });
    
    $('#dlg1').bind('dialogbeforeclose', function(){
        if($current.do_submit){
          ($current.form).submit();
          $current.form = null;
          $current.do_submit = false;
        }
    });
    
    $('.submitter_btn').click(function(e){
        e.preventDefault();
        $current.form = $(this).parents('form:first');
        $('#dlg1').dialog('open');
    });
    
    
    </script>
    </body>
    </html>
    
    

    x.php的来源

    
    <?php
    echo "HELLO";
    

    【讨论】:

    • 这确实有效,谢谢!我以不同的方式解决了它,虽然在我阅读你的帖子之前,它可能不如你的那么好,但它有效!当他们确认操作后,我只是将他们转发到进行表单处理的地方,而不是尝试提交表单。如果有与“preventDefault()”相反的功能,这会容易得多
    • 不客气。我很高兴它有帮助。我有一个类似的要求,就是用 jQuery 对话框替换普通的 JavaScript 警报对话框。在玩了一会儿发布的代码 sn-p 之后,我能够分解出分配给 $current 的对象文字的“.bind”和 do_submit 属性。至于 event.preventDefault() 的逆向或逆向,相关的 jQuery API 页面有一些有趣的 cmets 与这个api.jquery.com/event.preventDefault 相关。
    【解决方案2】:

    在找到this script 之前,我习惯于自制验证。它的脑损伤要少得多,并且似乎可以很好地验证几乎任何类型或组合的表单元素。每个元素只有一个类声明至少会打开验证。要每页执行两个(或更多),您只需为每个表单 ID 或名称实例化一个。很简单!

    【讨论】:

    • 太棒了。一定要自己试试。谢谢你的链接。
    • 我的表单验证都是在 kohana 中完成的,我想要一些会弹出一个小确认框的东西,说“你确定要删除这个等等。”当用户选择删除某些东西时,谢谢你的链接!
    • Becky,我们也在后端进行验证......这个脚本可以让你轻松地进行前端验证。虽然它可能无法回答您的问题,但进行客户端验证几乎总是比后端更可取,因为它更快并且对用户体验的干扰更少。它还会将点击保存到您的服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多