TextAreaはmaxlengthの解決策(jquery)をサポートしていない

2061 ワード

使用するNetコントロールが长くなって、1ページのTextBoxに制御长の制御を増加する时、简単に1つのmaxlength='xxx'をプラスして、しかしテストは确かにいつもしかし、原因は多行モードを设置したので、このような情况の下で生成するhtmlコードはtextareaで、同时にmaxlength属性は増加していませんて、IEはtextareaのmaxlength属性を支持しないため、firefox 6でテストすると、firefoxはこの属性をサポートしていることがわかります.それでは簡単です.自分でjqueryの拡張を書いたので、textarea制御の最大長を簡単に実現できます.
拡張コードは次のとおりです.
 
  
(function($){
$.fn.textarealimit = function(settings) {
settings = jQuery.extend({
length:1000
}, settings);
maxLength =settings.length;
$(this).attr("maxlength",maxLength).bind("keydown",doKeydown).bind("keypress",doKeypress).bind("beforepaste",doBeforePaste).bind("paste",doPaste);
function doKeypress()
{
var oTR = document.selection.createRange()
if(oTR.text.length >= 1)
event.returnValue = true
else if(this.value.length > maxLength-1)
event.returnValue = false
}
function doKeydown()
{
var _obj=this;
setTimeout(function()
{
if(_obj.value.length > maxLength-1)
{
var oTR = window.document.selection.createRange()
oTR.moveStart("character", -1*(_obj.value.length-maxLength))
oTR.text = ""
}
},1)
}
function doBeforePaste()
{
event.returnValue = false
}
function doPaste()
{
event.returnValue = false
var oTR = document.selection.createRange()
var iInsertLength = maxLength - this.value.length + oTR.text.length
var sData = window.clipboardData.getData("Text").substr(0, iInsertLength)
oTR.text = sData;
}
}
})(jQuery);

以上はIEに対してコピーペーストの制御および入力時制御を制御しただけであり、IEの特性を使用するため、これらの方法はfirefoxでは無効である.
呼び出しコード:
 
  
$(document).ready(function() {
$("#ctl00_ZiiOContent_ucQuestionnaire_txtquestion4_2").textarealimit();
});