jQuery - 更改 jqueryvalidate 以将类添加到父 li
我目前正在尝试编辑 GeekTantra 的 jQuery Validate 插件,使其在显示错误消息时将类应用于包含输入字段的父列表项。这是我添加了 jQuery(id).addClass(redhighlight); 的代码我对 jQuery 相当陌生,所以我可能犯了一个非常明显的错误。
/**
* @author GeekTantra
* @date 20 September 2009
*/
(function(jQuery){
var ValidationErrors = new Array();
jQuery.fn.validate = function(options){
options = jQuery.extend({
expression: "return true;",
message: "",
error_class: "ValidationErrors",
error_field_class: "ErrorField",
live: true
}, options);
var SelfID = jQuery(this).attr("id");
var unix_time = new Date();
unix_time = parseInt(unix_time.getTime() / 1000);
if (!jQuery(this).parents('form:first').attr("id")) {
jQuery(this).parents('form:first').attr("id", "Form_" + unix_time);
}
var FormID = jQuery(this).parents('form:first').attr("id");
if (!((typeof(ValidationErrors[FormID]) == 'object') && (ValidationErrors[FormID] instanceof Array))) {
ValidationErrors[FormID] = new Array();
}
if (options['live']) {
if (jQuery(this).find('input').length > 0) {
jQuery(this).find('input').bind('blur', function(){
if (validate_field("#" + SelfID, options)) {
if (options.callback_success)
options.callback_success(this);
}
else {
if (options.callback_failure)
options.callback_failure(this);
}
});
jQuery(this).find('input').bind('focus keypress click', function(){
jQuery("#" + SelfID).next('.' + options['error_class']).remove();
jQuery("#" + SelfID).removeClass(options['error_field_class']);
});
}
else {
jQuery(this).bind('blur', function(){
validate_field(this);
});
jQuery(this).bind('focus keypress', function(){
jQuery(this).next('.' + options['error_class']).fadeOut("fast", function(){
jQuery(this).remove();
});
jQuery(this).removeClass(options['error_field_class']);
});
}
}
jQuery(this).parents("form").submit(function(){
if (validate_field('#' + SelfID))
return true;
else
return false;
});
function validate_field(id){
var self = jQuery(id).attr("id");
var expression = 'function Validate(){' + options['expression'].replace(/VAL/g, 'jQuery(\'#' + self + '\').val()') + '} Validate()';
var validation_state = eval(expression);
if (!validation_state) {
if (jQuery(id).next('.' + options['error_class']).length == 0) {
jQuery(id).after('<span class="' + options['error_class'] + '">' + options['message'] + '</span>');
jQuery(id).addClass(redhighlight);
}
if (ValidationErrors[FormID].join("|").search(id) == -1)
ValidationErrors[FormID].push(id);
return false;
}
else {
for (var i = 0; i < ValidationErrors[FormID].length; i++) {
if (ValidationErrors[FormID][i] == id)
ValidationErrors[FormID].splice(i, 1);
}
return true;
}
}
};
jQuery.fn.validated = function(callback){
jQuery(this).each(function(){
if (this.tagName == "FORM") {
jQuery(this).submit(function(){
if (ValidationErrors[jQuery(this).attr("id")].length == 0)
callback();
return false;
});
}
});
};
})(jQuery);
I'm currently trying to edit GeekTantra's jQuery Validate plugin to make it apply a class to the parent list item containing the input field if an error message is displayed. Here is the code with my addition of jQuery(id).addClass(redhighlight); I'm fairly new to jQuery so I'm probably making a bloody obvious mistake.
/**
* @author GeekTantra
* @date 20 September 2009
*/
(function(jQuery){
var ValidationErrors = new Array();
jQuery.fn.validate = function(options){
options = jQuery.extend({
expression: "return true;",
message: "",
error_class: "ValidationErrors",
error_field_class: "ErrorField",
live: true
}, options);
var SelfID = jQuery(this).attr("id");
var unix_time = new Date();
unix_time = parseInt(unix_time.getTime() / 1000);
if (!jQuery(this).parents('form:first').attr("id")) {
jQuery(this).parents('form:first').attr("id", "Form_" + unix_time);
}
var FormID = jQuery(this).parents('form:first').attr("id");
if (!((typeof(ValidationErrors[FormID]) == 'object') && (ValidationErrors[FormID] instanceof Array))) {
ValidationErrors[FormID] = new Array();
}
if (options['live']) {
if (jQuery(this).find('input').length > 0) {
jQuery(this).find('input').bind('blur', function(){
if (validate_field("#" + SelfID, options)) {
if (options.callback_success)
options.callback_success(this);
}
else {
if (options.callback_failure)
options.callback_failure(this);
}
});
jQuery(this).find('input').bind('focus keypress click', function(){
jQuery("#" + SelfID).next('.' + options['error_class']).remove();
jQuery("#" + SelfID).removeClass(options['error_field_class']);
});
}
else {
jQuery(this).bind('blur', function(){
validate_field(this);
});
jQuery(this).bind('focus keypress', function(){
jQuery(this).next('.' + options['error_class']).fadeOut("fast", function(){
jQuery(this).remove();
});
jQuery(this).removeClass(options['error_field_class']);
});
}
}
jQuery(this).parents("form").submit(function(){
if (validate_field('#' + SelfID))
return true;
else
return false;
});
function validate_field(id){
var self = jQuery(id).attr("id");
var expression = 'function Validate(){' + options['expression'].replace(/VAL/g, 'jQuery(\'#' + self + '\').val()') + '} Validate()';
var validation_state = eval(expression);
if (!validation_state) {
if (jQuery(id).next('.' + options['error_class']).length == 0) {
jQuery(id).after('<span class="' + options['error_class'] + '">' + options['message'] + '</span>');
jQuery(id).addClass(redhighlight);
}
if (ValidationErrors[FormID].join("|").search(id) == -1)
ValidationErrors[FormID].push(id);
return false;
}
else {
for (var i = 0; i < ValidationErrors[FormID].length; i++) {
if (ValidationErrors[FormID][i] == id)
ValidationErrors[FormID].splice(i, 1);
}
return true;
}
}
};
jQuery.fn.validated = function(callback){
jQuery(this).each(function(){
if (this.tagName == "FORM") {
jQuery(this).submit(function(){
if (ValidationErrors[jQuery(this).attr("id")].length == 0)
callback();
return false;
});
}
});
};
})(jQuery);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它是
jQuery(id).addClass('redhighlight');
Edit #1
这将获取您正在验证的字段的父级并添加
redhighlight< /代码> 类。它应该可以工作。
It's
jQuery(id).addClass('redhighlight');
Edit #1
This will get the parent of the field you're validating and add the
redhighlight
class. It's supposed to work.