键盘事件、字符计数器和textLength道具困境

keyboard events, char counter and textLength prop dilemma

本文关键字:textLength 困境 计数器 事件 字符 键盘      更新时间:2023-09-26

希望这是一个有效的问题。

我用javascript为一个textarea元素做了一个char计数器。它相当于一个字符计数器,用于限制输入中允许的文本量。当用户键入一个字符时,字符数会上升,并显示在下面的框中,这样用户就可以知道到目前为止他写了多少个字符。

我用keydown和keypress处理了它,因为charCode属性在每个浏览器上都不一样,主要是Chrome和Opera(没有在Safari中检查)。当charCode不起作用时,将使用keyCode。这不是问题所在。问题出现在textareaObj.value属性中。

似乎当我按下键盘按钮时,首先用旧的textareaObj.value值处理键盘事件,然后计算新值,所以如果我输出console.log(textarea.value.length),它会显示旧值,但在Firefox、Chrome Firebug和Developer工具中,显示的值是新值.length,textarea.value.length的真实值。

为了更好地解释它,我制作了一个函数来处理这些事件。我在调用函数中放入了console.log(obj.value.length)。输出是旧值,但firebug(或firefox web控制台,或Chrome控制台)显示的是length属性的实际值。有人能解释一下为什么会发生这种情况吗?

此外,在textarea对象中还有一个textLength属性。它的值与textareaObj.value.length相同,但当我尝试访问它时,它是未定义的。为什么?我在Mozilla开发者页面上查找了textLength,但它只是说了你所期望的,它包含了文本的长度,但没有其他内容。

谢谢你的帮助。

编辑:

function execute() {
var txtArea = document.getElementById('description');
txtArea.addEventListener('keypress', charCount, false);
txtArea.addEventListener('keydown', charCount, false);

}http://jsfiddle.net/WUJvv/1/

jsFiddle链接的代码示例就在那里。

给你。这在我的电脑上有效,但在jsFiddle上不起作用,我无法让它工作。我很抱歉。只要做我在jsFiddle中做的同样的事情,它就会起作用。

len变量必须在用户输入时递增,在用户擦除字符时递减。它做得很好,但如果我高亮显示大部分文本并将其全部擦除,它会递减1,因为程序会看到我的输入不是字符,而是擦除按钮(keyCode8)。

假设我输入的"这是一个句子"有18个字符。我突出显示"句子"并将其删除。这给我留下了10个字符,但txtArea.value.length说是17,因为它只是看到我输入的不是字符,而是一个擦除按钮(keyCode 8),然后递减到17。但是,如果你在Firefox Web控制台中查看textarea对象,你会看到textLength属性是10,textarea.value是"This is a"(没有"句子"部分)。textLength属性在本例中非常有用,因为它显示了文本的真实长度,但未定义。

我不是专家,但我猜javascript首先进入处理事件的函数,然后查看DOM中的内容。实际发生了什么?

使用input事件将得到您想要的。看看这把小提琴。它将在值更改后激发,但在用户按下或按住某个键时会持续激发。