将preventdefault附加到调用函数的.submit

时间:2014-02-11 17:06:54

标签: javascript jquery html

$(function() {
    $('#login').submit(function(e){
        login();
        e.preventDefault();
    });
}); 

function login() {
    $('#btnLogin').attr('disabled','disabled');
    $("#btnLogin").css('background', 'url(/imgs/submit.gif) 50% -3px');
    var url = $(this).attr('action');
    var data = $(this).serialize();
    $("#btnLogin").css('color', 'transparent');     
    $.post(url, data).done(function(data) {
        $('#btnLogin').removeAttr('disabled');
        $("#btnLogin").css('color', '#ffffff');
        $("#btnLogin").css('background', '#4ea885');
        data = jQuery.parseJSON(data);
        if(data === false) {
            $(".cover").append('<div class="alert alert-warning">We\'re sorry, that password does not match the username or email address provided.</div>');
        } else if (data == true) {
            location.reload();
        }
    });

}

我尝试了各种方式,我想将#login附加到函数登录并阻止提交

2 个答案:

答案 0 :(得分:0)

$(function() {
    $('#login').submit(function(e){
        e.preventDefault();
        login();

    });
}); 

答案 1 :(得分:0)

您在问题中指定的代码几乎是正确的。问题在于login()函数中的$(this)部分。 $(this)没有访问表单属性的范围。如果我的猜测是正确的$(this).attr('action')将返回'undefined',这会导致你的帖子请求失败,反过来你的e.preventDefault甚至都不会执行。所以你的表单刚刚发布。您是否可以检查您的控制台,如果您在那里遇到任何错误,请告诉我们。

替换

var url = $(this).attr('action');
var data = $(this).serialize();

var url = $('#login').attr('action');
var data = $('#login').serialize();

如果这不是问题,请评论,我会再次检查。