【问题标题】:How to prevent jQuery FancyBox from closing immediately after submit?如何防止 jQuery FancyBox 在提交后立即关闭?
【发布时间】:2010-06-06 18:41:15
【问题描述】:

我正在从 jQuery 的 FancyBox 中加载内联注册表单。但是,在提交表单后,该框会立即关闭,而我想在 FancyBox 本身中向用户显示一些反馈。此反馈在服务器端生成并打印在 FancyBox 中。

我怎样才能让盒子只在他们没有反馈时才关闭?我正在考虑使用 ajax 来刷新 FancyBox 本身,而不是刷新后的整个页面。但我就是想不通这个 ajax $.ajax({type, cache, url, data, success});有效...而且似乎javascript中的“提交绑定”没有反应。

我希望有人可以帮助我解决这个问题。我在下面粘贴我的代码。如果有任何问题,请询问..

提前谢谢!

这是javascript:

<script type="text/javascript">
        $(document).ready(function() {
            $("#various1").fancybox({
                'transitionIn'      : 'none',
                'transitionOut'     : 'none',
                'scrolling'         : 'no',
                'titleShow'         : false,
                'onClosed'          : function() {
                    $("#registration_error").hide();
                }
            });
        });

        $("#registration_form").bind("submit", function() {


            if ($("#registration_error").val() != "Registration succeeded!") {
                $("#registration_error").show();
                $.fancybox.resize();
                return false;
            }

            $.fancybox.showActivity();

            $.ajax({
                type        : "POST",
                cache       : false,
                url         : "/data/login.php",
                data        : $(this).serializeArray(),
                success     : function(data) {
                    $.fancybox(data);
                }
            });

            return false;
        });

这是我在 FancyBox 中显示的内联表单:

<div style="display: none;">
        <div id="registration" style="width:227px;height:250px;overflow:auto;padding:7px;">
        <?php echo "<p id=\"registration_error\">".$feed."</p>"; ?>
        <form id="registration_form" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
            <p>
                <label for="username">Username: </label>
                <input type="text" id="login_name" name="username" size="30" />
            </p>
            <p>
                <label for="password">Password: </label>
                <input type="password" id="pass" name="pw" size="30" />
            </p>
            <p>
                <label for="repeat_password">Repeat password: </label>
                <input type="password" id="rep_pass" name="rep_pw" size="30" />
            </p>
            <p>
                <input type="submit" value="Register" name="register" id="reg" />
            </p>
            <p>
                <em></em>
            </p>
        </form>
        </div>
    </div>

【问题讨论】:

    标签: jquery fancybox submit


    【解决方案1】:

    我使用了fancybox的ajax部分..

    $.ajax({
                        type        : "POST",
                        cache       : false,
                        url         : "data/register.php",
                        data        : $(this).serializeArray(),
                        success     : function(data) {
                            data = $.parseJSON(data);
    
                        if (data.feedback == "Registration succeeded!") {
                          $.fancybox("Welcome, "+data.name+"! You can now log in.");
                          $.fancybox.resize();
                        }
                        else{
                          $("#registration_error").html(data.feedback);
                        }
                    }
                });
    

    在register.php文件中,我检查了数据是否正确,并做了一些反馈。我将反馈放在 register.php 中的 JSON 对象中,我可以在我的主页中的 ajax 的“成功”选项中使用该对象(见上文)。如果反馈是肯定的,我就制作了花式框,如果不是,我将反馈放入注册表单中的 div #registration_error 中。

    我的 register.php 文件的代码如下所示:

    $feed = "";
    
    // Put post vars in php vars
    $username = $_POST[username];
    $password = $_POST[pw];
    $rep_password = $_POST[rep_pw];
    
    // Check if php vars are not empty and check if the username doesn't exist in my user.class
    if(!empty($username) && !empty($password) && !empty($rep_password))
    {
        $user = new User();
    
        $user->Username = $username;
        $user->Password = $password;
        $user->Password2 = $rep_password;
    
        try
        {
            $user->Save();
            $feed .= "Registration succeeded!";
        }
        catch(Exception $e)
        {
            $feed = $e->getMessage();
        }   
    }
    else
    {
        $feed = "Please fill in all the fields!";
    }
    
    // Feedback for fancybox
    $output = array();
    
    $output['name'] = $username;
    $output['feedback'] = $feed;
    
    // Send JSON
    $output = json_encode($output);
    print $output;
    

    希望对您有所帮助!

    GRtz!

    【讨论】:

      【解决方案2】:

      对于一个 iframe 打开的 fancybox,这是提交后打印的代码:

      <script type='text/javascript'>
        $(document).ready(function(){
          parent.document.location.reload();
          parent.jQuery.fancybox.close();
        });
      </script>
      

      【讨论】:

        【解决方案3】:

        这是我做的。

        如果设置了 $_POST['xxx'],我基本上触发了一个打开表单的链接。

        如果单击元素 id=form,则第一个 jquery 函数会打开一个表单。 第二个函数将触发将打开相同表单的元素 id=triger_form。

        $(document).ready(function() {
        
        $("a#form").fancybox({
            'hideOnContentClick': false
        });
        $("a#triger_form").fancybox().trigger('click')({
            'hideOnContentClick': false
        });
        

        });

        if($_POST['refer_submit'] == TRUE) {
        

        回声''; }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-15
          • 1970-01-01
          相关资源
          最近更新 更多