Cod*_*Man 15 javascript html5 css3
当使用input标签作为type="tel"触摸设备上的键盘时,输入框的类型对应.但是,我希望input隐藏标签中的值(与password类型一样).正常的行为是在用户输入时隐藏每个角色.
<input type="tel">
Run Code Online (Sandbox Code Playgroud)
input [type="tel"] {
-webkit-text-security: disc;
}
Run Code Online (Sandbox Code Playgroud)
此解决方案适用于大多数浏览器,但不适用于IE.
<input type="password" pattern="[0-9]*" inputmode="numeric">
Run Code Online (Sandbox Code Playgroud)
此解决方案无法按预期工作.
有没有办法完成我想要做的事情?
nop*_*ppa 17
我知道这已经有一个很好的,工作和公认的解决方案来自jdgregson,但我真的很喜欢rybo111的基于自定义字体的解决方案的想法,并想尝试一下.
我们的想法是创建一个只包含圆圈的字体,这样当字体系列应用于输入元素时,似乎没有显示任何字符.
因此,如果任何人仍然对具有良好浏览器支持且没有jdgregson答案的已知问题的非JS解决方案感兴趣,我为此创建了一个简单的字体.
GitHub回购:https://github.com/noppa/text-security
JSFiddle演示:https://jsfiddle.net/449Lamue/6/
可以通过从克隆的repo或RawGit或类似的东西中包含dist/text-security.css来使用该字体.包括CSS后,你可以通过设置元素的使用的字体font-family来'text-security-disc'.
<link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/noppa/text-security/master/dist/text-security.css">
<style>
input [type="tel"] {
font-family: "text-security-disc";
-webkit-text-security: disc;
}
</style>
Run Code Online (Sandbox Code Playgroud)
本着"polyfilling"-webkit-text-security的精神,我还添加了"circle"和"square"选项作为隐藏符号.
我在Android 5.0上使用Chrome v49,IE11,Microsoft Edge 25和Chrome v50进行了测试,其中"tel"类型的输入打开了数字键盘.
有几种方法可以实现这一目标:
最优雅的解决方案是使用内置的-webkit-text-security: circle;CSS样式,这是为这个东西.不幸的是,这不是便携式的,IE或Edge不支持.如果您选择使用此方法,可以在此处找到解决方法以获得其他浏览器的支持.
正如Fidel90和其他人所指出的那样,您可以尝试在用户选择之后切换type="tel"到type="password".我在这里提出了这个想法.它在iOS中完美运行,但在Android中无法启动第一次点击,然后在第二次点击时作为默认键盘启动.
rybo111在下面的noppa实现的注释中提出的另一个想法是使用只有密码点字符的字体.这可能是最便携和最不具体的解决方案.一个缺点是用户无法看到他们刚输入的字符,这是现代移动密码字段的通常行为.这方面的一个全面的小提琴被张贴在这里.
我的想法(下面)是使用第二个输入来存储实数,然后在用户输入数字时隐藏数字.请注意,这将过滤最终号码中的所有非电话号码字符,但您可以修改变量以接受您想要的任何内容.
经过测试和处理:
var BACKSPACE_CHARS = [8, 46, 229];
function hideNumber(fakeInput, event) {
var hideChar = '*';
// add characters that you want to appear in the final number to this
// string -- leave the string empty to allow all characters
var phoneChars = '0123456789()-+';
var keyCode = event.keyCode || event.charCode;
var key = String.fromCharCode(keyCode)+'';
var realInput = document.getElementById("hidden-number");
var len = fakeInput.value.length;
fakeInput.value = '';
if(phoneChars.indexOf(key) > -1 || !phoneChars.length) {
realInput.value += key;
} else {
if(BACKSPACE_CHARS.indexOf(keyCode) < 0) {
--len;
}
}
for(var i=0; i<len; i++) { // no String.repeat() in IE :(
fakeInput.value += hideChar;
}
updateDisplay();
}
function backspace(event) {
var keyCode = event.keyCode || event.charCode;
var realInput = document.getElementById("hidden-number");
if(BACKSPACE_CHARS.indexOf(keyCode) > -1) { // backspace or delete
var len = realInput.value.length;
realInput.value = realInput.value.slice(0, len-1);
}
updateDisplay();
}
function updateDisplay() {
var realInput = document.getElementById("hidden-number");
var display = document.getElementById("display");
display.innerHTML = realInput.value || '';
}Run Code Online (Sandbox Code Playgroud)
<input type="tel" name="number" id="number-hider" onkeypress="hideNumber(this, event)" onkeydown="backspace(event)" onblur="hideNumber(this)">
<input type="hidden" name="realnumber" id="hidden-number">
<div id="display"></div>Run Code Online (Sandbox Code Playgroud)
已知错误:
使用noppa 的答案和他的 GitHub 字体以及jdgregson 的答案,这是一个交钥匙 CSS 解决方案(小提琴):
@font-face {
font-family: "password-mask";
src: url(data:font/woff;charset:utf-8;base64,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) format("woff");
}
.numeric-password {
font-family: password-mask;
}
.numeric-password::placeholder {
font-family: initial;
}Run Code Online (Sandbox Code Playgroud)
<input type="tel" class="numeric-password" placeholder="test" />Run Code Online (Sandbox Code Playgroud)
要支持较旧的 iOS 和 Android 设备,您只需添加另一个数据 URI 字体定义以及密码掩码字体的 ttf 文件。IE 与 eot 字体文件相同,但大多数现代浏览器都支持 woff 并且应该使用此 CSS。
| 归档时间: |
|
| 查看次数: |
6778 次 |
| 最近记录: |