標籤:

怎麼讓input元素的顯示值和value值不一樣?

比如&,顯示時是321


使用Object.defineProperty 定義一個新欄位吧,比如_value

&
&
&
&

&

測試在console中輸入 app._value = "123",你看到input的值會是321,相應的你在input中輸入"abc",app._value拿到的就是"cba"了

還有,以上代碼都是兼容IE8的

當然我還是不太理解你用意是什麼,邏輯層面處理下應該更通用吧?


如果只是障眼法,可以搞另一個元素蓋上去;

如果要求單元素搞定,可以用style.color(設置和背景色相同),監聽value變化後,用canvas畫出來文字然後設置background-image~~~

挺無聊的題目。


一些流行的 MVVM 框架(如 Angular)支持 viewValue 與 modelValue 的區分,分別代表了顯示值與實際獲得的值,可以通過編寫一些指令來控制在符合某些條件的情況下才把 viewValue 寫入到 modelValue 中去。也就是說,這兩者可以不一致。

如果沒有使用框架也不想用,建議閱讀源碼,學習實現方式。


樓上的答案都too young,too simple,sometime naive,

弄2個input,一個顯示,一個隱藏,保存實際的值,

你們呀,還是要努力學習各種姿勢...


我覺得問出來這種問題的人,多半是遇到了奇怪的需求又沒有實際解決問題的能力,一般不會採用這種VALUE和顯示值不同的方式,可以取巧,比如自定義屬性

&

這種寫法獲取值的方式是:

inputObj.getAttribute = ("data-value");

如果jQuery的寫法就是:

inputObj.attr("data-value");

如果你想要更簡單一些,通過 obj.value這種方式,也不是不可以的,重寫Input的prototype,通過 inputObje.value(); 即可取得input的data-value的值,同時呈現出來的值又是value

Element.prototype.value = function(){
if(this.nodeName == "input"){
return this.getAttribute("data-value");
}
}

或者是兩個文本框,一個記錄值,一個顯示值,參考 @落魄者@Fula Li。


仔細想了想。直接通過修改value值來實現顯示反向確實十分困難。

主要的問題就是。input是可以交互的。用戶可以輸入可以修改可以在任何一個字元前後刪除添加剪切粘貼。

那麼。

當我輸入12的時候。顯示的是21。

我在21的後面輸入3的時候。是應該顯示321呢?還是顯示312呢?

如果顯示312。那麼so easy。但這樣就沒有什麼意義了。我連續輸入123。居然顯示的是312。不合適。

如果顯示321。。。抱歉。我不知道應該怎麼去diff上次的值與本次值的區別。在什麼字元位置。是增還是減。。。


上周遇到一個相似的情況,如果題主需要顯示的值和傳到伺服器上的數據不一樣但兩個值都是靜態的話,我用的是兩個input,一個的type是text 可以寫你想要顯示的值,一個的type是hidden,用來保存想要作為數據的值。如果想要動態顯示不一樣的話,我覺得要用javascript去改吧。。


推薦閱讀:

如果個人技能與如圖所示的技能差不多,可以找到一份多少薪水的工作?
贊同數超過10k再點贊會變成NaN?
到底什麼是前端、後端、後台啊?
自學前端之路應該往簡歷上添加什麼項目增加競爭力?
是什麼讓你在前端行業堅持下去,或者什麼讓你發現你是真的熱愛它?

TAG:前端開發 |