【问题标题】:value.length not working as expected when backspacing退格时 value.length 没有按预期工作
【发布时间】:2016-02-08 22:06:24
【问题描述】:

我正在尝试使用 javascript 获取 textarea 的字符,当您在​​ textarea 中输入文本时它可以正常工作,但是当您使用退格时,它会给出错误的字符长度。

<textarea id = 'textarea' onkeydown = "adjust()"></textarea>

<script>

function adjust() {

var length = document.getElementById("textarea").value.length+1;
alert("length: "+length);

} //end of function adjust()
</script>

例如:

比方说,你在textarea中有25个字符的时候开始。然后当你使用退格一次时:

提示:26 个字符; 再次使用退格,它会提示:25 个字符; 然后,24、23、22、21。

这不是真的,因为它应该显示 24、23、22、21、20 和 19。为什么会这样,我们将如何解决?

【问题讨论】:

  • 当函数adjust被调用时,退格默认行为(即删除前一个字符)尚未应用。所以第 25 个字符仍然存在,并且在“调整”函数中,您在删除第 25 个字符之前将长度加一。
  • @DPac 哦。我知道了。所以它在删除字符之前调用函数。该死。我们将如何解决这个问题?
  • 尝试“keyup”。或“输入”事件。请注意,当用户通过鼠标或编辑菜单更改字段时,不会触发键事件。
  • P. S. 对于“keydown”,给您带来问题的不仅仅是退格键:对于 any 键,该字段的值不会立即更改,这就是为什么您的 adjust() 函数必须在第一名。按 ctrl 或 shift 也会弄乱你的计数。

标签: javascript jquery char textarea


【解决方案1】:

这可能是因为您正在收听onkeydown 事件,并且直到退格键再次按下后才记录每个字符的删除?

【讨论】:

    【解决方案2】:

    这行得通:

    function adjust() {
    
    var key = event.keyCode;
    if (key == 8 || key == 46) {
    var length = document.getElementById("textarea").value.length-1;
    } //end of if (key == 8 || key == 46)
    else {
    var length = document.getElementById("textarea").value.length+1;
    }
    alert("length: "+length);
    
    } //end of function adjust()
    

    【讨论】:

    • 键 8 和 46 是退格和删除。
    • 如果我按 ctrl 或 shift 怎么办?
    • @nnnnnn 它将计数增加 1,但不会永久增加。我没关系。
    • @nnnnnn 这将与根据文本区域中有多少字符自动调整文本区域高度的功能结合使用,因此 ctrl 或 shift 很好。
    猜你喜欢
    • 2015-05-04
    • 2015-09-14
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    • 2012-07-02
    • 2011-09-07
    相关资源
    最近更新 更多