無法從細細的空氣中取消字符串替換, 您需要將原始值保存在某處。例如,你可以使用jQuery的.data()
。 將原始值與.data('value', str)
, 一起存儲,當字段收到焦點時, 將其從.data('value')
恢復。
function getMaskedValue(str) {
var trailingCharsIntactCount = 4;
return new Array(str.length - trailingCharsIntactCount + 1).join('*') + str.slice(-trailingCharsIntactCount);
}
var $cc = $('.cc');
var str = $cc.val();
$cc.data('value', str);
$cc
.val(getMaskedValue(str));
.focus(function() {
$(this).val($(this).data('value'));
});
而作爲@aaron指出, 焦點後丟失,你也想恢復屏蔽值:
$cc
.focus(function() {
$(this).val($(this).data('value'));
})
.blur(function() {
str = $(this).val();
$(this).data('value', str);
$(this).val(getMaskedValue(str));
});
他也是正確的,你不需要.data()
, 你可以將實際值存儲在一個變量中。 這將是很好的隱藏在關閉。 (See fiddle.)
(function() {
function getMaskedValue(s) {
var masklen = s.length - 4;
return s.substr(0, masklen).replace(/./g, '*') + s.substr(masklen);
}
var $cc = $('.cc');
var value = $cc.val();
$cc
.val(getMaskedValue(value))
.focus(function() {
$(this).val(value);
})
.blur(function() {
value = $(this).val();
$(this).val(getMaskedValue(value));
});
})();
我還簡化計算所述屏蔽值, 應表現得更好,從而消除了陣列操作的實現。
你不能扭轉它。您需要在某處保存原始值。 –