我正在嘗試基本的Jquery插件和原型概念,但結束了一個不尋常的行爲。Jquery插件與原型
HTML:
<div>
<span>
<textarea>Text Area with 500 characters. Adding Some text.</textarea>
<span class="cl"></span>
</span>
<span>
<textarea>Text Area with 100 characters</textarea>
<span class="cl"></span>
</span>
</div>
JQuery的:
(function ($) {
var tisCharsLeftCntxt = null;
function fnCharsLeft(ele, genStngs) {
this.jqe = $(ele);
this.maxChars = genStngs.maxChars;
tisCharsLeftCntxt = this;
this.fnInit();
}
fnCharsLeft.prototype = {
fnInit: function() {
tisCharsLeftCntxt.fnUpdateRemainingChars();
tisCharsLeftCntxt.jqe.keyup(function (event) {
key = event.keyCode ? event.keyCode : event.which;
if ((37 != key) && (38 != key) && (39 != key) && (40 != key)) {
tisCharsLeftCntxt.fnUpdateRemainingChars();
}
});
},
fnUpdateRemainingChars: function() {
var charsLft = tisCharsLeftCntxt.maxChars - tisCharsLeftCntxt.jqe.val().length,
jqeDestToUpdt = tisCharsLeftCntxt.jqe.siblings('.cl');
charsLft = (charsLft < 0) ? 0 : charsLft;
if (charsLft) {
jqeDestToUpdt.text(charsLft + ' more of ' + tisCharsLeftCntxt.maxChars + ' characters');
} else {
tisCharsLeftCntxt.jqe.val(tisCharsLeftCntxt.jqe.val()
.substring(0, tisCharsLeftCntxt.maxChars));
tisCharsLeftCntxt.jqe.scrollTop(tisCharsLeftCntxt.jqe[0].scrollHeight);
jqeDestToUpdt.text("Maximum limit of " + tisCharsLeftCntxt.maxChars + " characters reached");
return false;
}
}
};
$.fn.fnCharsLeftPlgn = function (genStngs) {
return $(this).data("charsleft", new fnCharsLeft(this, genStngs));
};
})(window.jQuery);
$('div span:nth-child(1) textarea').fnCharsLeftPlgn({maxChars: 500});
$('div span:nth-child(2) textarea').fnCharsLeftPlgn({maxChars: 100});
小提琴: http://jsfiddle.net/5UQ4D/ & http://jsfiddle.net/5UQ4D/1/
的要求是,該插件應該表明,可以在文本中添加的字符數-區。如果在一個頁面中只有一個文本區域,那麼這個工作就很好。但是,如果有多個,只有最後一個與該插件關聯的文本區域正常工作。
關於這裏的代碼,在左側的文本區域中的字符數都是在初始化期間正確更新(僅限於第一次)。但稍後當文本區域內容發生變化時,只有第100個字符(或與插件關聯的最新文本區域)才能正常工作。
似乎,我無法將插件上下文獨立限制在文本區域。請指點,..
'$ .jQuery.fn.fnCharsLeftPlgn'應該是'$ .fn.fnCharsLeftPlgn'('$'是作爲'window.jQuery'傳遞的參數) – JAAulde
對不起,這是一個複製錯誤。正如你所提到的,檢查JS小提琴,那裏的代碼是正確的。這裏也更新了代碼。 – NEB
你有全局var tisCharsLeftCntxt = null;通過它訪問你的方法內的元素...這就是爲什麼只有最後一個textarea是活躍的 –