如何在使用Java Script输入下一个字符后用 *
替换文本框中输入的文字?
我在该文本框中使用 inputSecret
标记,但在我输入时会立即隐藏整个内容。
这就是我现在正在做的事情:(这是错误的。我们可以调整这个inputSecret标签吗?)
<h:inputSecret maxlength="6" value="#{userBean.field}" />
要求:
"*"
。 **34**
123456
的价值。
1
*2
**3
**34
(因为不应该屏蔽第3和第4个字符)**345
**34*6
**34**
(当我输入此textBox时)有关如何做到这一点的任何线索?
PS:此字段可以是字母数字。我仅使用数值作为示例。
答案 0 :(得分:0)
如果我们闭上眼睛而无视安全问题,则有一种方法只能使用JavaScript。
基本思想来自此accepted answer。知道<h:inputSecret ../>
实际上是呈现为<input type="password".../>
的,我们可以使用Java脚本通过以下方式对其进行操作:
input
属性的隐藏name
,以使JSF看不到任何区别,input
的类型 从密码更改为 text ,
<h:form class="form">
<h:inputSecret maxlength="6" value="#{userBean.field}" class="pass"/>
</h:form>
//creating mask from real value according to required steps
function createMask(value) {
var mask = "";
var valueLen = value.length;
if (valueLen === 1) {
mask = value;
} else if (valueLen === 2) {
mask = "*" + value.substring(1, 2);
} else if (valueLen === 3) {
mask = "**" + value.substring(2, 3);
} else if (valueLen === 4) {
mask = "**" + value.substring(2, 4);
} else if (valueLen === 5) {
mask = "**" + value.substring(2, 5);
} else if (valueLen === 6) {
mask = "**" + value.substring(2, 4) + "**";
}
//if maxLength>6 then add more else ifs
return mask;
}
$(document).ready(function () {
var timer = "";
//add hidden field to hold actual typed value
$(".form").append($('<input type="hidden" class="hidpassw" />'));
//give hidden field the same name as original
$(".hidpassw").attr("name", $(".pass").attr("name"));
//change original type from password to text and remove name property
$(".pass").attr("type", "text").removeAttr("name");
//get maxlength attr value of original field
var maxLength = parseInt($(".pass").attr("maxlength"));
//alphanumeric chars are added to value
$("body").on("keypress", ".pass", function (e) {
var code = e.which;
var length = $(".hidpassw").val().length;
//modify regex if it doesnt fit your 'alphanumeric' definition
if (/^[a-zA-Z0-9]$/i.test(String.fromCharCode(code))) {
//check if maxLength is not reached
if (length < maxLength) {
//if length is less them maxLength then add typed alphanumeric char to hidden value
var character = String.fromCharCode(code);
$(".hidpassw").val($(".hidpassw").val() + character);
}
}
});
//special case for backspace
$("body").on("keydown", ".pass", function (e) {
var code = e.which;
var length = $(".hidpassw").val().length;
if (code === 8) {
e.preventDefault();
if (length > 0) {
clearTimeout(timer);
$(".hidpassw").val($(".hidpassw").val().substring(0, length - 1));
$(".pass").val(createMask($(".hidpassw").val()));
}
}
});
$("body").on("keyup", ".pass", function (e) {
var length = $(".hidpassw").val().length;
if (length <= maxLength) {
clearTimeout(timer);
//show last typed char for 100ms and then mask it
timer = setTimeout(function () {
$(".pass").val(createMask($(".hidpassw").val()));
}, 100);
}
});
});