這個問題是參照this jQuery limit plugin。這裏的來源: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
?仔細看看,如果函數正常初始化,擴展看起來好像很好。
2)我不喜歡它使用setInterval
來執行子字符串函數。 keypress
或類似事件不會是更好,更合乎邏輯的方式來做到這一點嗎?另外,我認爲這是導致(或至少啓用)v1.2 change log中引用的「閃爍文本」錯誤的原因(不,它不是固定的)。
3)爲什麼初始化變量f
?它從不使用或引用。
4)另外,這不是一個可鏈接的方法,作爲一個jQuery擴展,它應該是。我對編寫jQuery擴展不太熟悉,但是可以通過在方法結尾處的return this;
完成,對嗎?
看起來這只是一個糟糕的編程案例,但我想獲得外部意見。
2)好點。複製/粘貼會繞過'keypress',但我認爲'change'事件仍然會觸發,所以我會嘗試綁定兩者。無論如何,我想擺脫'setInterval',所以我將不得不玩弄事件。 3)我沒有注意到'var'的缺失,它確實困擾着我的窗口對象。呸。 非常感謝。 – tomaroo