2017-06-29 96 views
0

我期待更改輸入值而不使用設置element.value。也就是說,在不替換元素中的整個值的情況下編輯該值。使用Javascript更改輸入值而不會覆蓋值

例如,去除從輸入字段的第一個字符:

this.value.substring(1)返回一個值,而不是直接修改串,在那裏的值所以沒有影響。

我試過把字符串當作一個數組來處理,但this.value.shift()Array.prototype.shift.apply(this.value, [])都沒有工作,這並不令人感到意外。


這裏的最終原因是改變輸入值而不影響插入位置。是的,我知道我可以在設置輸入值後手動設置插入符號的位置,但這會創建它自己的錯誤行爲,我試圖完全避開。

再次,變化值(除去或在任何給定位置插入字符)中的文本輸入:

沒有直接

設置element.value沒有設置或修改插入位置

這甚至可能嗎?

+4

JavaScript中的字符串是不可變的,所以您只能重新分配字符串屬性/變量。您唯一的解決方法是在重寫值屬性 –

+1

P.S.之後設置插入位置。這正是爲什麼大多數實現只求在輸入失去焦點後才修改value屬性的原因 –

+0

@MikaelLennholm聽起來像是一個可靠的**答案**如果您想將其發佈爲... –

回答

2

Javascript中的字符串是不可變的,所以您只能重新分配字符串屬性/變量。

在輸入值的情況下,瀏覽器在程序改變之後應該知道放置位置的邏輯問題(它應該保持在之前的位置,如果它被移動並且處於那種情況在哪?)。

您唯一的解決方法是在重寫value屬性後設置插入符的位置。雖然如你所說,這樣的解決方案往往是脆弱和錯誤的,這正是爲什麼大多數實現訴諸於只有在輸入失去焦點後修改value屬性