这个问题是参考这个 jQuery 限制插件。这是来源:
(function($){
$.fn.extend({
limit: function(limit,element) {
var interval, f;
var self = $(this);
$(this).focus(function(){
interval = window.setInterval(substring,100);
});
$(this).blur(function(){
clearInterval(interval);
substring();
});
substringFunction = "function substring(){ var val = $(self).val();var length = val.length;if(length > limit){$(self).val($(self).val().substring(0,limit));}";
if(typeof element != 'undefined')
substringFunction += "if($(element).html() != limit-length){$(element).html((limit-length<=0)?'0':limit-length);}"
substringFunction += "}";
eval(substringFunction);
substring();
}
});
})(jQuery);
现在我可能只是在这里吹毛求疵......但也许我错过了一些东西。以下是我的问题/疑虑:
1)在字符串中创建子字符串函数然后eval
'ing它的目的是什么?仔细看,如果函数正常初始化,扩展似乎可以正常工作。
2)我不喜欢它使用 asetInterval
来执行子字符串函数。难道一个keypress
或类似的事件不是更好、更合乎逻辑的方式吗?此外,我认为这是(或至少启用)v1.2 更改日志中引用的“闪烁文本”错误的原因(不,它没有修复)。
3)为什么要f
初始化变量?它从未被使用或引用过。
4)另外,这不是一个可链接的方法,作为一个 jQuery 扩展,它应该是。我对编写 jQuery 扩展不太熟悉,但这可以通过return this;
在方法结束时完成,对吗?
看起来这只是一个糟糕的编程案例,但我想得到一个外界的意见。