citicards.com如何使用特殊掩码实现登录ID文本框?
当您键入"johndoe“并将焦点突出时,文本框将变成”jo*oe“。
有带图案的HTML5面具吗?

发布于 2015-03-30 07:13:47
下面是使用纯javascript实现所需行为的示例。这只是一个样本。在实际使用substr之前,您可能需要进行长度检查等。
document.querySelector("input#accountName").addEventListener("blur", function() {
var value = this.value;
document.querySelector("#maskedAccountName").textContent=this.value.substr(0,2)+this.value.substr(2,value.length-2).replace(/./g,"*")+this.value.substr(this.value.length-2, this.value.length);
this.style.display = "none";
document.querySelector("#maskedAccountName").style.display = "block";
}, false);
document.querySelector("#maskedAccountName").addEventListener("click", function() {
this.style.display = "none";
document.querySelector("input#accountName").style.display = "block";
document.querySelector("input#accountName").focus();
}, false);div#maskedAccountName {
border: 1px solid rgba(231, 231, 231, 0.67);
padding: 2px;
display: none;
border-top-style: inset;
-webkit-appearance: textfield;
background-color: white;
width: 120px;
} <input type="text" id="accountName">
<div id="maskedAccountName">
</div>
我之所以不更改现有的input值,是因为在表单提交中访问时,可能无法读取原始值。所以我创建了一个隐藏的div,它代替了原始的输入元素。您可以使用CSS将div样式设置为与输入元素相同。
发布于 2015-03-30 07:09:05
您必须使用JS/jQuery。首先计算从开始到结束的混合字母,然后用*替换所有其他内容,并附加到假输入字段中。
在这里您可以看到(将opacity替换为0以完全隐藏输入字段,display: none将无法在这里工作,因为您必须单击输入本身):
$(document).ready(function() {
$("#hField").focusin(
function() {
$('#hFieldSp').text($(this).val());
});
$("#hField").focusout(function() {
var start = '';
var end = '';
var value = $(this).val();
var stars = '';
if (value.length < 3) {
return;
}
if (value.length > 6) {
start = value.substring(0, 2);
end = value.substring(value.length - 2);
stars = '*'.repeat(Math.max(1, value.length - 4));
} else {
start = value.substring(0, 1);
end = value.substring(value.length - 1);
stars = '*'.repeat(Math.max(1, value.length - 2));
}
$('#hFieldSp').text(start + stars + end);
});
$(document).on('input paste change', '#hField', function() {
$('#hFieldSp').text($(this).val());
});
});
String.prototype.repeat = function(num) {
return new Array(num + 1).join(this);
}.wrapper {
float: left;
position: relative;
}
#hField,
#hFieldSp {
width: 100px;
height: 30px;
line-height: 30px;
border: 1px solid #ddd;
}
#hField {
opacity: .2;
position: absolute;
left: 0;
top: 0;
}<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div id="hFieldSp"></div>
<input type="text" id="hField" />
</div>
发布于 2015-03-30 07:34:05
我会用一个虚拟的输入来显示。然后在模糊时,将值传递到隐藏的输入,并在虚拟中修改文本。如果用户想要改变值,您也可能希望相反:在焦点上,将值从隐藏的输入复制到虚拟。这里有一个示例,不需要jQuery,如果输入中少于5个字符,它将生成所有*s。
var start = 0;
var end = 4;
var dummy_user = document.getElementById("user");
var actual_user = document.getElementById("hidden_user");
dummy_user.addEventListener("blur", function() {
actual_user.value = dummy_user.value;
if (dummy_user.value.length > 4) {
start = 2;
end = dummy_user.value.length - 2;
}
var val = "";
for (var i = 0; i < start; i++) {
val += dummy_user.value[i];
}
for (i = start; i < end; i++) {
val += "*";
}
for (i = end; i < dummy_user.value.length; i++) {
val += dummy_user.value[i];
}
dummy_user.value = val;
});
dummy_user.addEventListener("focus", function() {
this.value = actual_user.value;
}); <form action="">
<input type="text" name="user" id="user">
<input type="hidden" name="hidden_user" id="hidden_user" value="">
<input type="password" name="password">
<input type="submit" value="Sign in">
</form>
https://stackoverflow.com/questions/29339752
复制相似问题