将对象/字段传递给javascript函数:this。[Control] vs this.form。[control]

时间:2012-01-25 15:23:37

标签: javascript html

JavascriptScript:

   <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不是。无论如何使用该函数而不在表单中包含字段?感谢

1 个答案:

答案 0 :(得分:2)

单独传递this。它本身就是元素。要查找“计数”标签,您始终可以使用document.getElementById()来查找它。

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

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