键盘事件、字符计数器和textLength道具困境
keyboard events, char counter and textLength prop dilemma
希望这是一个有效的问题。
我用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
事件将得到您想要的。看看这把小提琴。它将在值更改后激发,但在用户按下或按住某个键时会持续激发。
- AngularJS部分模板双向绑定&刷新困境
- 递归函数编程困境
- JQuery AJAX 和 OOP JS 范围困境
- Javascript 逻辑运算符:多个 ||语法困境
- 流星教程的第 2 步让我陷入困境
- 陷入困境,使用Firebase使用Facebook登录
- 新手多维数组加法困境
- Socket.io clients.length 的困境(其中 clients === io.sockets.clien
- AngularJS钟表工厂,$timeout困境
- 在一个页面上拥有多个版本的jquery不冲突的古老困境
- 键盘事件、字符计数器和textLength道具困境
- 简单的闭合困境
- jquery困境,图像替换
- 陷入了实现嵌套数据过滤循环的困境,这可能是一种更优雅的方法
- 输入值更新困境
- backbone.js中的父子视图困境
- 如何解决mouseenter和mouseleave的重叠困境
- Javascript: textContent based on textLength
- 陷入了使用jQuery动态显示变量的困境
- 陷入了动态构建javascript对象的困境