1

我正在使用 jquery validate v1.7 和 jQuery v1.4.2,我必须在 blur 和 onkeyup 事件上使用 .live。这些事件似乎不适用于这些版本。任何关于如何处理带有这些约束的 onkeyup 和 blur 事件的解决方案都会有所帮助。

注意:我将无法将这些版本更新到可用的最新版本,因为多个团队正在使用这些文件的旧版本并且他们不想升级到最新版本。

Jquery 验证调用:

onkeyup: function(element){
    C.options.throwMessages(element);

},

throwMessages: function(el){

                            if($(el).attr('name') === "email"){ //Validating email field
                                var selectedField = $(el);
                                var emailValid = C.options.simple_validate_email(selectedField);

                                if (C.options.pageName === 'login' || C.options.pageName === 'register'){
                                        $(C.options.currentPage).find(':submit').click(function(){
                                            var selectedField = $(C.options.currentPage).find('input.email');
                                            if(!selectedField.val().length){
                                                            selectedField.removeClass('errorIndicator');
                                            }
                                        });
                                }

                                if(C.options.pageName === "register"){
                                            selectedField.live('blur', function(){
                                                if($(this).val().length === 0){
                                                    $(this).parent().parent().removeClass('aimValid');  
                                                }
                                            });


                                            selectedField.live('keydown focusout', function(event) {
                                                        if(event.type == 'keydown'){
                                                            if(!C.options.simple_validate_email($(this))){
                                                                $(this).parent().parent().removeClass('aimValid');
                                                                $(C.options.currentPage).find('.emailTip').show().html('Please enter a valid email address.');
                                                            }else{
                                                                $(this).removeClass('errorIndicator');
                                                                $(C.options.currentPage).find('.emailTip').hide().html('');
                                                            }

                                                        }else if(event.type == 'focusout'){

                                                                if(!C.options.simple_validate_email($(this))){

                                                                }else{
                                                                    $(this).removeClass('errorIndicator');
                                                                    $(C.options.currentPage).find('.emailTip').hide().html('');
                                                                }

                                                            }   

                                            });

                                    }

                            }else if($(el).attr('name') === "password"){//Validating password field
                                var selectedPasswordField = $(el);
                                    if(C.options.pageName === "register"){
                                                //password field
                                                selectedPasswordField.live('keydown', function(){
                                                    if($(this).val().length === 0){
                                                        $(this).parent().parent().removeClass('aimValid');  
                                                        $(this).removeClass('aimError');
                                                    }
                                                });
                                        }
                            }else if($(el).attr('name') === "username2"){//Validating email field on ForgotPassword screen
                                var selectedField = $(el);
                                if (C.options.pageName === 'forgotPassword') {
                                            var isFormValid = false;
                                            $(C.options.currentPage).find(':submit').click(function(){
                                                        if((selectedField.val().length === 0) || !selectedField.parent().parent().find('div.aimError').length){
                                                                    isFormValid = true;
                                                        }
                                                selectedField.live('keydown focusout', function(event){
                                                        if(event.type === 'keydown'){
                                                                $(C.options.currentPage).find('.emailTip').hide().html('');

                                                        }else{
                                                                $(C.options.currentPage).find('.emailTip').hide().html('');
                                                        }                                               
                                                });

                                                    if (isFormValid) {
                                                        $(C.options.currentPage).find('.emailTip').show().html('Please enter a valid email address.');
                                                    }else{
                                                        $(C.options.currentPage).find('.emailTip').hide().html('');
                                                    }

                                            });


                                    }
                            }


                        },
4

1 回答 1

0

.live()已在所有版本的 jQuery 中被弃用。对于 1.4,您可以.delegate()这样使用:

$("#container").delegate("#test", "keyup keydown focusout", function(e) {
    log(e.type + " event");
});

工作演示:http: //jsfiddle.net/jfriend00/WxqwS/


对于 1.7,您可以使用.on()which 几乎相同,.delegate()只是参数的顺序更符合逻辑:

$("#container").on("keyup keydown focusout", "#test", function(e) {
    log(e.type + " event");
});

工作演示:http: //jsfiddle.net/jfriend00/FULfe/

于 2012-09-06T21:02:52.033 回答