错误:jQuery jquery.min.js?_ = 1420285687057:4未捕获TypeError:undefined不是函数

时间:2015-01-03 12:45:53

标签: javascript jquery jquery-validate html5-history

当我点击几次时,我遇到了jquery validate plugn和history API的问题 我有错误jquery.min.js?_ = 1420288991396:4未捕获TypeError:undefined不是函数,当我用validate注释片段时,脚本工作正常。这个脚本怎么连续。 在文件script.js中我有:

$(document).ready(function(){

    $("#loginForm").validate({
            rules: {
                username: {
                    required: true,
                    minlength: 2
                },
                password: {
                    required: true,
                    minlength: 5
                },
            },
            messages: {
                username: {
                    required: "Please enter a username",
                    minlength: "Your username must consist of at least 2 characters"
                },
                password: {
                    required: "Please provide a password",
                    minlength: "Your password must be at least 5 characters long"
                },
            },

            submitHandler: function() {
                var username=$("#usernameLogin").val();
                var password=$("#passwordLogin").val();
                var dataString = 'username='+username+'&password='+password+'&tag=login';
                if($.trim(username).length>0 && $.trim(password).length>0){
                    $.ajax({
                        type: "POST",
                        url: "include/help4meApi.php",
                        data: dataString,
                        cache: false,
                        success: function(data){
                            if(data){       
                                if($("#rememberMe:checked").val()){
                                    checkCookie(username);
                                }
                                window.location.href = "index.php";
                            }
                            else{   
                                $("#error").html("<label class='error'>Wrong password or username!</label>");
                                console.log("Wrong password or username!");
                            }
                        }
                    });
                }
                return false;
            }
        });


        // validate signup form on keyup and submit
        $("#signupForm").validate({
            rules: {
                firstname: {
                    required: true,
                    minlength: 3
                },
                lastname: "required",
                username: {
                    required: true,
                    minlength: 2
                },
                password: {
                    required: true,
                    minlength: 5
                },
                confirm_password: {
                    required: true,
                    minlength: 5,
                    equalTo: "#password"
                },
                email: {
                    required: true,
                    email: true
                }
            },
            messages: {
                firstname: {
                    required: "Please enter your firstname",
                    minlength: "Your firstname  must consist of at least 3 characters"
                },
                lastname: "Please enter your lastname",
                username: {
                    required: "Please enter a username",
                    minlength: "Your username must consist of at least 2 characters"
                },
                password: {
                    required: "Please provide a password",
                    minlength: "Your password must be at least 5 characters long"
                },
                confirm_password: {
                    required: "Please provide a password",
                    minlength: "Your password must be at least 5 characters long",
                    equalTo: "Please enter the same password as above"
                },
                email: "Please enter a valid email address",
            },

            submitHandler: function() {
                var username=$("#username").val();
                var password=$("#password").val();
                var firstname=$("#firstname").val();
                var lastname=$("#lastname").val();
                var email=$("#email").val();
                var dataString = 'username='+username+'&password='+password+'&firstname='+firstname+'&lastname='+lastname+'&email='+email+'&tag=register';
                if($.trim(username).length>0 && $.trim(password).length>0){
                    $.ajax({
                        type: "POST",
                        url: "include/help4meApi.php",
                        data: dataString,
                        cache: false,
                        success: function(data){
                            if(data){
                                console.log(data);
                                $(".register_notification").html("<label class='error' style='background:#6DC066'>Register successfully!</label>");
                            }
                            else{   
                                $(".register_notification").html("<label class='error'>Username already exists, please choose another one!</label>");
                            }
                        }
                    });
                }
                return false;
            }
        });

        // propose username by combining first- and lastname
        $("#username").focus(function() {
            var firstname = $("#firstname").val();
            var lastname = $("#lastname").val();
            if (firstname && lastname && !this.value) {
                this.value = firstname + "." + lastname;
            }
        });

    $("footer a").click(function(e){
        //e.preventDefault(); 
        /*  
        if uncomment the above line, html5 nonsupported browers won't change the url but will display the ajax content;
        if commented, html5 nonsupported browers will reload the page to the specified link. 
        */

        //get the link location that was clicked
        pageurl = $(this).attr('href');
        //to get the ajax content and display in div with id 'content'
        $.ajax({url:pageurl,success: function(data){
            $('#login_box').html(data);
        }});

        //to change the browser URL to 'pageurl'
        if(pageurl!=window.location){
            window.history.pushState({path:pageurl},'',pageurl);    
        }
        return false;  
    });
 });


$(window).bind('popstate', function() {
    if(!location.pathname.localeCompare('/login.php')){
        $.ajax({url:location.pathname,success: function(data){
            $('body').html(data);
        }});
    }
    else{
        $.ajax({url:location.pathname,success: function(data){
            $('#login_box').html(data);
        }});
    }

});

来自jQuery库:

// Get transport
transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );

// If no transport, we auto-abort
if ( !transport ) {
    done( -1, "No Transport" );
} else {
    jqXHR.readyState = 1;

    // Send global event
    if ( fireGlobals ) {
        globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
    }
    // Timeout
    if ( s.async && s.timeout > 0 ) {
        timeoutTimer = setTimeout(function() {
            jqXHR.abort("timeout");
        }, s.timeout );
    }

    try {
        state = 1;
        transport.send( requestHeaders, done );
    } catch ( e ) {
        // Propagate exception as error if not done
        if ( state < 2 ) {
            done( -1, e );
        // Simply rethrow otherwise
        } else {
            throw e;
        }
    }
}

它显示了抛出e。

1 个答案:

答案 0 :(得分:1)

我想不出为什么使用浏览器的“后退”按钮会导致JavaScript失败。应该缓存所有内容并继续像以前一样工作。

您获得的错误类似于您未能包含该插件时所遇到的错误。

以下是你如何包含jQuery Validate插件......

<script src="http://jqueryvalidation.org/files/dist/jquery.validate.js"></script>

请注意您是如何热链接到开发人员自己的域上托管的插件。 (可能是他的演示和/或下载。)此错误可能是由计时问题引起的,该插件无法从此URL加载足够快。

开发者已经在两个不同的免费CDN服务上提供了他的插件,其中“hotlinking welcome”。因此,不要直接从他的域中删除插件,而是尝试热链接到here提供的CDN链接。

<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.js"></script>