TextArea 控件的最大长度问题(js json)

  如果只是单纯地想限制 textarea 中的字数,不想写太多的话,可用:

  <textarea onkeyup="this.value = this.value.slice(0, 80)"></textarea>

  或

  <textarea onkeyup="this.value = this.value.substring(0, 80)"></textarea>

  在 textarea 的 onkeyup 中检查字数之方法:

  

复制代码 代码如下:

  <script language="javascript" type="text/javascript">

  function DjCheckMaxlength(oInObj)

  {

  var iMaxLen = parseInt(oInObj.getAttribute('maxlength'));

  var iCurLen = oInObj.value.length;

  if ( oInObj.getAttribute && iCurLen > iMaxLen )

  {

  oInObj.value = oInObj.value.substring(0, iMaxLen);

  }

  } //@ END OF DjCheckMaxlength()

  </script>

  <textarea maxlength="80" onkeyup="return DjCheckMaxlength(this);"></textarea>

  o 设定好自动去检查所有的 textarea 之方法:

  

复制代码 代码如下:

  <head>

  <script language="javascript" type="text/javascript">

  function DjTextArea_AddMaxlengthAttr()

  {

  var aX = document.getElementsByTagName('textarea');

  for ( var iI = 0; aX.length > iI; iI++ )

  {

  if ( aX[iI].getAttribute('maxlength') )

  {

  aX[iI].onkeyup = aX[iI].onchange = DjTextArea_CheckMaxlength;

  }

  }

  } //@ END OF DjTextArea_AddMaxlengthAttr()

  function DjTextArea_CheckMaxlength()

  {

  var iMaxLen = parseInt(this.getAttribute('maxlength'));

  var iCurLen = this.value.length;

  if ( this.getAttribute && iCurLen > iMaxLen )

  {

  this.value = this.value.substring(0, iMaxLen);

  }

  } //@ END OF DjTextArea_CheckMaxlength()

  </script>

  </head>

  <body onload="DjTextArea_AddMaxlengthAttr();">

  

复制代码 代码如下:

  var Inputs = {

  OnIntegerOnly: function() {

  var k = System.isIE ? event.keyCode : event.which;

  if(event.ctrlKey || event.ctrlAlt || event.shiftKey) {

  Inputs.DisableInput(event);

  return;

  }

  if ( ( k < 48 || k > 57 )

  && 8 != k

  && 9 != k

  && 46 != k

  && 37 != k

  && 39 != k

  && 16 != k

  && 36 != k

  && 35 != k

  && 17 != k

  && 13 != k

  && ( k < 96 || k > 105 )

  ) {

  Inputs.DisableInput(event);

  }

  return k;

  },

  OnDecimalOnly: function() {

  var k = System.isIE ? event.keyCode : event.which;

  if(event.ctrlKey || event.ctrlAlt || event.shiftKey) {

  Inputs.DisableInput(event);

  return;

  }

  if( ( k < 48 || k > 57 )

  && 8 != k

  && 9 != k

  && 46 != k

  && 37 != k

  && 39 != k

  && 16 != k

  && 36 != k

  && 35 != k

  && 17 != k

  && 13 != k

  && 190 != k

  && 110 != k

  && ( k < 96 || k > 105 )

  ) {

  Inputs.DisableInput(event);

  }

  return k;

  },

  OnAsciiOnly: function() {

  var k = System.isIE ? event.keyCode : event.which;

  if ( ( k < 97 || k > 122 )

  && ( k < 65 || k > 90 )

  && ( k < 48 || k > 57 )

  && 8 != k

  && 9 != k

  && 46 != k

  && 37 != k

  && 39 != k

  && 16 != k

  && 36 != k

  && 35 != k

  && 17 != k

  && 13 != k

  && 189 != k

  && 187 != k

  ) {

  Inputs.DisableInput(event);

  }

  return k;

  },

  DisableInput: function(event) {

  if(System.isIE)

  event.returnValue = false;

  else

  event.preventDefault();

  },

  AddOnPos: function(obj, charvalue) {

  //obj代表要插入字符的输入框

  //value代表要插入的字符

  obj.focus();

  var r = document.selection.createRange();

  var ctr = obj.createTextRange();

  var i;

  var s = obj.value;

  //注释掉的这种方法只能用在单行的输入框input内

  //对多行输入框textarea无效

  //r.setEndPoint("StartToStart", ctr);

  //i = r.text.length;

  //取到光标位置----Start----

  var ivalue = "&^asdjfls2FFFF325%$^&";

  r.text = ivalue;

  i = obj.value.indexOf(ivalue);

  r.moveStart("character", -ivalue.length);

  r.text = "";

  //取到光标位置----End----

  //插入字符

  obj.value = s.substr(0,i) + charvalue + s.substr(i,s.length);

  ctr.collapse(true);

  ctr.moveStart("character", i + charvalue.length);

  ctr.select();

  },

  MaxLength: function() {

  var _this = event.srcElement;

  var iMaxLen = parseInt(_this.getAttribute('maxlength'));

  switch(event.type) {

  case 'beforepaste': {

  event.returnValue = false;

  } break;

  case 'paste': {

  var iTxtLen = _this.value.lenUTF8();

  var txtCbd = window.clipboardData.getData("Text");

  var iCbdLen = txtCbd.lenUTF8();

  if((iMaxLen - iTxtLen) <= iCbdLen) {

  var iSurplusLen = iMaxLen - iTxtLen;

  var subStr = txtCbd.substr(0, iSurplusLen);

  var insertStr = '';

  for(var i = 0; i < subStr.length; i++) {

  var chr = subStr.substr(i, 1);

  if(iSurplusLen >= chr.lenUTF8()) {

  insertStr += chr;

  iSurplusLen -= chr.lenUTF8();

  }

  }

  Inputs.AddOnPos(_this, insertStr);

  //_this.style.backgroundColor = 'red';

  //System.setTimeout(Inputs.ColorTips, 500, _this);

  event.returnValue = false;

  event.srcElement.style.imeMode = 'disabled';

  } else {

  event.returnValue = true;

  event.srcElement.style.imeMode = 'auto';

  }

  } break;

  case 'keypress': {

  var iTxtLen = _this.value.lenUTF8();

  if(iMaxLen <= iTxtLen) {

  while(_this.value.lenUTF8() > iMaxLen) {

  _this.value = _this.value.substr(0, _this.value.length - 1);

  }

  Inputs.DisableInput(event);

  if('disabled' != event.srcElement.style.imeMode) {

  event.srcElement.style.imeMode = 'disabled';

  }

  }

  else {

  if('auto' != event.srcElement.style.imeMode) {

  event.srcElement.style.imeMode = 'auto';

  }

  }

  } break;

  case 'keyup': {

  var k = System.isIE ? event.keyCode : event.which;

  if (8 != k

  && 9 != k

  && 46 != k

  && 37 != k

  && 39 != k

  && 16 != k

  && 36 != k

  && 35 != k

  && 17 != k

  && 13 != k

  && 189 != k

  && 187 != k

  ) {

  if(_this.getAttribute) {

  _this.fireEvent('onkeypress');

  }

  }

  } break;

  case 'keydown': {

  var k = System.isIE ? event.keyCode : event.which;

  if (8 != k

  && 9 != k

  && 46 != k

  && 37 != k

  && 39 != k

  && 16 != k

  && 36 != k

  && 35 != k

  && 17 != k

  && 13 != k

  && 189 != k

  && 187 != k

  ) {

  var iTxtLen = _this.value.lenUTF8();

  if(iMaxLen <= iTxtLen) {

  Inputs.DisableInput(event);

  }

  }

  } break;

  }

  },

  TextAreaMaxLength: function() {

  var aX = document.getElementsByTagName('textarea');

  for(var i = 0; i < aX.length; i++) {

  if(aX[i].getAttribute('maxlength')) {

  aX[i].detachEvent('onbeforepaste', Inputs.MaxLength);

  aX[i].detachEvent('onpaste', Inputs.MaxLength);

  aX[i].detachEvent('onkeypress', Inputs.MaxLength);

  aX[i].detachEvent('onkeyup', Inputs.MaxLength);

  aX[i].detachEvent('onkeydown', Inputs.MaxLength);

  aX[i].attachEvent('onbeforepaste', Inputs.MaxLength);

  aX[i].attachEvent('onpaste', Inputs.MaxLength);

  aX[i].attachEvent('onkeypress', Inputs.MaxLength);

  aX[i].attachEvent('onkeyup', Inputs.MaxLength);

  aX[i].attachEvent('onkeydown', Inputs.MaxLength);

  /*

  var res = 'zh-cn' == window.navigator.systemLanguage

  ? '最大长度:'

  : 'Maximum length for: ';

  if('' == aX[i].title) aX[i].title = res + aX[i].getAttribute('maxlength');

  */

  }

  }

  },

  TextBoxMaxLength: function() {

  var aX = document.getElementsByTagName('input');

  for(var i = 0; i < aX.length; i++) {

  var maxLen = aX[i].getAttribute('maxlength');

  if('text' == aX[i].type

  && null != maxLen

  && '' != maxLen

  && undefined != maxLen

  && 2147483647 > parseInt(maxLen)

  && '' == aX[i].title) {

  aX[i].detachEvent('onbeforepaste', Inputs.MaxLength);

  aX[i].detachEvent('onpaste', Inputs.MaxLength);

  aX[i].detachEvent('onkeypress', Inputs.MaxLength);

  aX[i].detachEvent('onkeyup', Inputs.MaxLength);

  aX[i].attachEvent('onbeforepaste', Inputs.MaxLength);

  aX[i].attachEvent('onpaste', Inputs.MaxLength);

  aX[i].attachEvent('onkeypress', Inputs.MaxLength);

  aX[i].attachEvent('onkeyup', Inputs.MaxLength);

  /*

  var res = 'zh-cn' == window.navigator.systemLanguage

  ? '最大长度:'

  : 'Maximum length for: ';

  aX[i].title = res + aX[i].getAttribute('maxlength');

  */

  }

  }

  }

  }

  Tools.Inputs = Inputs;

  window.attachEvent('onload', Tools.Inputs.TextAreaMaxLength);

  window.attachEvent('onload', Tools.Inputs.TextBoxMaxLength);