类型错误:jQuery(...)。validate不是一个函数。

3

我正在将动态HTML内容带到另一个HTML内容中。这基本上是一个编辑表单HTML视图,但是当我尝试验证表单时,它会给出“TypeError: jQuery(...).validate不是函数”错误。我正在使用jQuery 1.6.2版本。

function validate_edit_venue() {
    jQuery('#venue_edit_form').validate({
        rules: {
            venueName: {
                required: true,
                minlength: 1,
                maxlength: 50
            },
            venueDescription: {
                required: false,
                lettersonly: true,
                maxlength: 150
            },
            venueType: {
                required: true
            }

        },
        messages: {
            venueName: {
                required: "Venue name is required",
                minlength: "Minimum 1  character required",
                maxlength: "Should not exceed 50 characters"
            },
            venueDescription: {
                maxlength: "Should not exceed 150 characters"
            },
            venueType: {
                required: "Please select a venue type"
            }

        }
    });
}

这是我的jQuery验证。我在jQuery编辑表单脚本中调用此函数。有人能帮我解决这个问题吗?这个问题可能是重复的,但大多数问题都是由于jQuery版本问题引起的,所以我无法通过它们获得恰当的答案。

      jQuery('#venue_edit_save').live('click', function(){

       validate_edit_venue();

       if(jQuery("#venue_edit_form").valid())
       {
            var directory_id = jQuery(this).attr('directory_id');
            var venue_type = jQuery(this).attr('venue_type');
            var venueName = jQuery('#venue_name').val();
            var venueDescription = jQuery('#description').val();
            var venueType = jQuery('#venue_types option:selected').val();
            var venueImage = jQuery('[name="profile_image'+directory_id+'"]').val();
            jQuery.blockUI();
            jQuery.ajax({
                    type: 'POST',
                    cache: false,
                    dataType: 'json',
                    url: baseurl+'catalog/catalog/action/venues/edit_venue',                
                    data:{'directory_id':directory_id,'venueName':venueName,'venueDescription':venueDescription,'venueType':venueType,'venueImage':venueImage},                

                    success: function(data)
                    {                    
                        if(data.status == 'success')
                        {
                        /*if(venue_type == venueType)
                        {
                            jQuery('#Venue_'+directory_id).replaceWith(data.html);
                        }
                        else
                        {
                            location.reload();                              
                        }*/
                            jQuery('#Venue_'+directory_id).replaceWith(data.html);
                            show_messages(data.status,data.msg);
                            setTimeout(jQuery.unblockUI);
                            jQuery('#edit-dining-venue-block').hide();
                            location.reload();
                        } 
                        else if(data.status == 401)
                        {
                            redirect_login_timed_out();                         
                        }
                    /*else
                    {
                        show_messages(data.status,data.msg);
                        setTimeout(jQuery.unblockUI);
                        jQuery('#edit-dining-venue-block').hide();
                    }*/
                    },
                    error:function (jqXHR)
                    {
                        if(jqXHR.status == 401)
                        {
                            redirect_login_timed_out();
                        }
                        setTimeout(jQuery.unblockUI);
                    }

            }); 
       }
  });

   // Hiding the edit venue view when clicking the cancel button
   jQuery('#venue_edit_cancel').live('click', function(){

       jQuery('#edit-dining-venue-block').hide();

   });              

});

这是出现错误的位置。这个jQuery会在验证时保存编辑后的信息。
谢谢。

jQuery .validation是一个插件,你是否有除了jQuery“正常”库文件之外的.js文件? - Sergio
是的。我已经添加了所有必要的插件,包括验证插件。 - Sahan De Silva
请确保jQuery-validation与您正在使用的jQuery版本兼容。 - Omar
1
请展示一下您如何包含脚本。 - André Dion
是的。验证插件与我使用的jQuery版本兼容。实际上,这个错误只发生在这个动态HTML内容中。在其他地方,这个错误不会发生,表单可以正确验证。例如:在“添加”表单中,验证正常工作,但在编辑表单中,它不起作用,而是出现了上述错误。编辑表单是一个动态HTML内容。 - Sahan De Silva
显示剩余3条评论
1个回答

3
这似乎是您的ajax调用返回脚本标记的情况。我认为这里发生的事情是您的ajax调用返回DOM以及另一个jquery脚本标记,它覆盖了您的jquery并丢失了所有插件,发生其他糟糕的事情。

真的。我包含了一些包含脚本标签的PHP文件。所以如果这是原因,如果脚本标签被覆盖,我可能需要寻找另一个解决方案,对吧? - Sahan De Silva
是的,这就是你的问题。Ajax调用应该返回不带脚本标签的HTML。你可能需要为此创建一个特殊的文件,而不是重用现有的文件。 - mkoryak
我已经成功解决了这个问题。我将jQuery替换为jq,然后它就正常工作了。在我的脚本上面还有另一个JavaScript文件,在那个文件中使用的是jq而不是jQuery。所以现在一切都完美正常了。谢谢你的帮助。 - Sahan De Silva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接