标记:
<input type="text" name="email" />
代码:
$(':text').focusout(function(){
$(this).validate(function(){
$(this).attr('name');
});
});
插件:
(function($){
$.fn.validate = function(type) {
return this.each(function(type) {
if (type == 'email') {
matches = this.val().match('/.+@.+\..{2,7}/');
(matches != null) ? alert('valid') : alert('invalid');
}
/*else if (type == 'name') {
}
else if (type == 'age') {
}
else if (type == 'text') {
}*/
else {
alert('total failure');
}
});
};
})(jQuery);
问题在于,当我执行上面的代码时,它会运行插件,就像type是一个字符串一样:“function(){ $(本).attr( '名称'); });“而不是将其作为一个函数执行。我该如何解决这个问题?
答案 0 :(得分:1)
您必须检查参数是否为函数。如果是,则使用返回值,否则假设它是字面值。
(function($) {
$.fn.validate = function(type) {
//check if type type is a function else take it as literal
type = typeof type !== "function" ? type : type();
return this.each(function(type) {
...
});
};
})(jQuery);