2012-01-25 42 views
1

JavascriptScript:传递对象/场到JavaScript函数:。此[控制]对this.form [控制]

<script type="text/javascript"> 
     function limitText(limitField, limitCount, limitNum){ 
      if (limitField.value.length > limitNum) 
       limitField.value = limitField.value.substring(0, limitNum); 
      else{ 
       if (limitCount != null) 
        limitCount.value = limitNum - limitField.value.length; 
      } 
     } 
    </script> 

这工作:

<form name="myForm"> 
    <textarea name="myTextArea" id="myTextArea" onKeyDown="limitText(this.form.myTextArea, this.form.remCount, 10);"></textarea> 
    <label name="remCount" id="remCount"></label> 
</form> 

但这并不:

<textarea name="myTextArea" id="myTextArea" onKeyDown="limitText(this.myTextArea, this.remCount, 10);"></textarea> 
    <label name="remCount" id="remCount">Chars Left </label> 

使用Chrome调试它,如果我不使用形式方法,那么limitFieldlimitCount为空,但在this.myTextArea不是。无论如何要使用该函数而不将表单中的字段封装起来?谢谢

回答

2

只是通过this本身。这将是元素本身。要找到“计数”标签,您始终可以使用document.getElementById()来查找它。

此外,虽然这不是你的问题的一部分:请注意,当值包括硬换行符时,浏览器报告textarea长度的不同值;即由于用户输入“Enter”键而出现换行符。某些浏览器将换行符视为值2个字符,因为实际上,,当<textarea>从表单返回到服务器时,其长度为两个字符。但是,某些浏览器只会将换行符报告为1个字符长,即使它们遵循相关规范并使用2个字符的换行符发送<textarea>值。

现代浏览器支持<textarea>元素的maxlength属性,但出于上述原因,它在Chrome和Firefox中无法正常工作(尽管我认为修补程序正在通过WebKit工作)。

+0

感谢您的快速响应! – Mike

+0

另外,我甚至没有想到的新行字符,这会是一个合适的解决办法: 如果(limitField.value.replace(“\ n”,“”)。长度> limitNum) 如果(limitCount != null) limitCount.innerText = limitNum - limitField.value.replace(“\ n”,“”).length; 或者会做那么多的字符串解析效率低下? – Mike

+0

嗯,是的,你基本上必须看看字段的值,并检查不是以“\ r”开头的单独的“\ n”字符。如果你找到这些(就像你在Firefox中那样),只需将它们的数量加到长度上即可得到*真实*长度。 – Pointy

相关问题