0

我正在尝试使用 fancybox 来显示如下登录表单

<div style="display:none">
    <form id="login_form" method="post" action="">
            <p id="login_error">Please, enter data</p>
        <p>
            <label for="login_name">Login: </label>
            <input type="text" id="login_name" name="login_name" size="30" />
        </p>
        <p>
            <label for="login_pass">Password: </label>
            <input type="password" id="login_pass" name="login_pass" size="30" />
        </p>
        <p>
            <input type="submit" value="Login" />
        </p>
        <p>
            <em>Leave empty so see resizing</em>
        </p>
    </form>
</div>  

的java脚本是

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

    if ($("#login_name").val().length < 1 || $("#login_pass").val().length < 1) {
        $("#login_error").show();
        $.fancybox.resize();
        return false;
    }

    $.fancybox.showActivity();

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

    return false;
});

html是

<a id="tip5" title="Login" href="#login_form"><?php echo "Login" ; ?></a>

当我单击登录链接时,它会显示登录弹出窗口,但是当我单击提交按钮时,它会关闭弹出窗口并刷新页面。

实际上它应该检查数据并在弹出窗口上显示数据而不是刷新页面。

谢谢

4

1 回答 1

1

可能还有更多问题:

  1. Fancybox 可能正在克隆原始 HTML 以将其放入弹出窗口。因此,您需要使用 functionlive而不是bind.
  2. Fancybox 可能会以某种方式更改表单的 ID(使用一些 DOM Inspector(如 FireBug for FireFox)检查)并确保弹出窗口中的表单 ID 是您为之提交事件的 ID。

我也更喜欢使用event.preventDefault()而不是返回 false... 我的 JS 代码将是:

$("#login_form").live("submit", function(e) {
    e.preventDefault();
    if ($("#login_name").val().length < 1 || $("#login_pass").val().length < 1) {
        $("#login_error").show();
        $.fancybox.resize();
        return false;
    }

    $.fancybox.showActivity();

    $.ajax({
        type        : "POST",
        cache   : false,
        url     : "login.php",
        data        : $(this).serializeArray(),
        success: function(data) {
            $.fancybox(data);
        }
    });
});
于 2012-06-18T08:11:27.820 回答