在textarea中输入的显示文本总是落后一步

时间:2013-02-18 20:46:50

标签: javascript html

我在表格中有一个textarea。输入文本时会显示<p>以及textarea中的字符数。问题是第一个角色没有被察觉。因此,当我键入第一个字符时,剩余的字符仍为75,并且字符不会显示在<p>.当我输入“abc”时,仅显示“ab”,其余字符为73而不是72。在此之后我从末尾删除“c”,然后在<p>中显示“abc”。这就像它总是落后一步。

使用简单的<input type="text">它可以正常工作。

<textarea  name="text" cols="56" rows="2" onKeyDown="drawAd();" onKeyUp="drawAd();" onFocus="drawAd();" maxlength="75" >
  <?php echo $text?>
</textarea>

function drawAd() 
{
    var draw_adtext = document.forms["MyForm"]["adtext"].value;
    var adtext = document.getElementById('p_adtext');
    var adtext2 = document.getElementById('p_adtext2');
    if (draw_adtext != "") {
        adtext.innerHTML = draw_adtext;
        adtext2.innerHTML = draw_adtext;
    } else {
        adtext.innerHTML = "";
        adtext2.innerHTML = "";
    }

   document.getElementById('textcount').innerHTML = 75 - document.forms["MyForm"]["adtext"].value.length + " chars left";
}

Ps:我知道maxlength不是textarea的官方属性,我知道如何处理它(以防有人注意到它)。

2 个答案:

答案 0 :(得分:1)

您提供的代码不具有功能(它指的是不存在的表单等)。 但我已经在jsfiddle.net/v2eHk/重新创建了它,据我所知,它的工作正常。是否有关于如何解决问题的更多信息?

答案 1 :(得分:0)

不幸的是,我的问题过于局部化,结果证明了这一点。感谢您在jsfiddle上尝试我的代码,我没想到只在空白网页上尝试这个部分。

我在标签之后有了这个代码,搞砸了所有东西。删除它解决了这个问题。

<script>
window.onload = function() { 
  var txts = document.getElementsByTagName('TEXTAREA') 

  for(var i = 0, l = txts.length; i < l; i++) {
    if(/^[0-9]+$/.test(txts[i].getAttribute("maxlength"))) { 
      var func = function() { 
        var len = parseInt(this.getAttribute("maxlength"), 10); 

        if(this.value.length > len) { 
          //alert('Maximum length exceeded: ' + len); 
          this.value = this.value.substr(0, len); 
          return false; 
        } 
      }

      txts[i].onkeyup = func;
      txts[i].onblur = func;
    } 
  } 
}
</script>

我认为我不应该解决这个问题,但我接受它作为解决这个问题的解决方案。