我希望更改输入的值,不用设置element.value
。也就是说编辑值而不替换元素中的整个值。
例如,从输入字段中删除第一个字符:
this.value.substring(1)
返回一个值,而不是直接修改字符串,因此对该值没有影响。
我已经尝试将字符串视为数组,但this.value.shift()
和Array.prototype.shift.apply(this.value, [])
都不起作用,这并不太令人惊讶。
这里的最终原因是在不影响插入位置的情况下改变输入值。是的,我知道我可以在设置输入值后手动设置插入位置,但这会产生我自己的错误行为,我试图完全绕过它。
再次,在文本输入中更改值(删除或插入任何给定位置的字符):
没有直接设置element.value
无设置或修改插入位置
这甚至可能吗?
答案 0 :(得分:2)
Javascript中的字符串是不可变的,因此您只能重新分配字符串属性/变量。
在输入值的情况下,浏览器在编程更改后应该知道插入符号的位置(如果它保留在之前的位置,是否应该移动并且在情况在哪里?)。
您唯一的解决方案是在重写value
属性后设置插入位置。虽然正如你所提到的,这样的解决方案通常都很脆弱,但这正是大多数实现仅仅在输入失去焦点后只修改value
属性 的原因。