2

我有以下代码不起作用。我希望你能帮我解决这个问题。

基本上我有一个表单,我想在提交之前先使用 jQuery Dialog 进行确认。所以当我点击提交时,我得到了对话框,但是当我按下是确认没有任何反应时!

    $(function() {

        $('#massform').submit(function(e){
           e.preventDefault();
           $('#dialog-mass-confirm').dialog('open');
        });


        $( "#dialog-mass-confirm" ).dialog({
            autoOpen: false,
            resizable: false,
            draggable: false,
            height:180,
            modal: true,
            buttons: {
                "No": function() {
                    $( this ).dialog( "close" );
                },
                "Yes": function() {
                    $("#massform").submit();
                }
            }
        });
    });

<form id="massform" method="post" action="new.php">
    <input type="text" name="email" size="41">
    <input type="submit" value="Submit">
</form>
4

2 回答 2

0

看来您可能有一个循环引用,因为您正在重新绑定表单的提交函数,然后从模态调用提交,这将触发最初打开模态的相同事件。我建议采取以下措施来避免这个问题:

$(function() {

    $('#submitButton').click(function(e){
       e.preventDefault();
       $('#dialog-mass-confirm').dialog('open');
    });


    $( "#dialog-mass-confirm").dialog({
        autoOpen: false,
        resizable: false,
        draggable: false,
        height:180,
        modal: true,
        buttons: {
            "No": function() {
                $( this ).dialog( "close" );
            },
            "Yes": function() {
                $("#massform").submit();
            }
        }
    });
});

<form id="massform" method="post" action="new.php">
    <input type="text" name="email" size="41">
    <input ID="submitButton" type="button" value="Submit">
</form>
于 2012-10-22T22:18:04.793 回答
0

您应该更详细地查找范围和事件触发,以便了解您面临的问题。1.st 你已经创建了一个绑定到你的表单提交事件的 jqery 函数。

   $('#massform').submit(function(e){
           e.preventDefault();
           $('#dialog-mass-confirm').dialog('open');
        });

当您使用提交按钮时,您的事件会被触发,并打开对话框。但是,当您提交表单时

            "Yes": function() {
            $("#massform").submit();

它触发前面指出的绑定函数......这会阻止提交它自己的表单。准确地说,您只需重新打开对话框。但这发生得如此之快以至于你没有注意到它。

如果您出于兼容性原因被迫使用提交操作...您可以使用 loc 变量来完成肮脏的工作...

$('#massform').submit(function(e, lock){
   if(lock)
   e.preventDefault();
   $('#dialog-mass-confirm').dialog('open');
});

而您可以在提交中设置锁定。从未尝试过这种方式,但它应该可以工作。我通常最终使用文档就绪范围中的变量。

当您无法修改表单时,这是一个肮脏的解决方案。丑陋但有效。

于 2012-10-22T22:39:33.940 回答