使 Input Type="Password" 在移动设备上使用数字键盘

Posted

技术标签:

【中文标题】使 Input Type="Password" 在移动设备上使用数字键盘【英文标题】:Make Input Type="Password" Use Number Pad on Mobile Devices 【发布时间】:2013-10-08 05:49:33 【问题描述】:

在我为移动设备设计的网站上,我有一个用于 PIN 码的输入字段。我希望文本在输入时被隐藏,并且我希望在移动设备上的用户想要输入 PIN 时弹出数字键盘。数字键盘在 Type="Number" 时弹出,但在 Type="Password" 时不会弹出,我不能(或不知道如何)设置 Type="Number and Password"。

有什么想法吗?

提前致谢!

【问题讨论】:

您可能需要伪造密码字段并自己在该字段中插入星号。 【参考方案1】:

某些浏览器 (ios) 将 [0-9]* 的特定 pattern 属性值识别为触发数字键盘。

HTML 5.1 草案包含inputmode 属性,旨在解决输入模式(如键盘)选择的特定问题,但尚未实施。

不过,您可以在未来使用它——尽管出于某种奇怪的原因,当前的 html 5.1 不允许 type=password 使用它。

<input type="password" pattern="[0-9]*" inputmode="numeric">

【讨论】:

我在 iOS 8.2 上试过这个,我得到了常规的字母键盘。 type="text" 时完全按预期工作;只有当我将其更改为 type="password" 时,我才能获得字母键盘。 使用 Cordova,构建 target=android 这不起作用。仍然显示数字键盘 如果您想测试这些答案中提出的不同方法,请在您的设备上查看cdpn.io/e/ygoNbJ【参考方案2】:

终于找到了答案here:

input[type=number] 
    -webkit-text-security: disc;

(仅适用于基于 WebKit 的浏览器)

【讨论】:

这对我有用(Safari,iOS 9.3.2)。不幸的是,输入的数字出现在屏幕键盘顶部自动建议区域的最左侧框中,因此它们仍然在屏幕上可见(尽管在实际输入字段本身中被屏蔽)。 继我之前的评论之后:似乎将输入字段类型从 number 更改为 tel 会阻止自动建议区域显示任何内容。结合-webkit-text-security: disc;,这样可以确保密码根本不会显示在屏幕上。 &lt;input type="number" pattern="[0-9]*" inputmode="numeric" min="1111" max="9999" style="-webkit-text-security: disc;" autofocus /&gt; 请注意,这种方法可能不安全,因为可以在检查器中看到输入值。此外,旁白会大声读出数字。【参考方案3】:

像使用“模式”和“输入模式”这样的简单方法在 Android 和 IOS 中都不起作用,因此我使用 CSS 和 javascript 实现了以下解决方法。

https://jsfiddle.net/tarikelmallah/1ou62xub/

HTML

 <div>
  <input type="password" class="form-control ng-valid-minlength ng-valid-pattern ng-dirty ng-valid ng-valid-required" id="pass" name="pass" data-ng-minlength="4" maxlength="4"  tabindex="-1">
  <input type="tel" class="form-control ng-valid-minlength ng-dirty ng-valid ng-valid-required" id="passReal" name="passReal" required="" data-ng-minlength="4" maxlength="4" data-display-error-onblur="" data-number-mask="telephone"
         tabindex="5">
</div>

JavaScript

$().ready(function()
var xTriggered = 0;
$( "#passReal" ).keyup(function( event ) 
  $('#pass').val($('#passReal').val());
  console.log( event );
);
$( "#pass" ).focus(function() 
  $('#passReal').focus();
);

  );

风格:

input#passReal
  width:1px;
  height:10px;

input#pass 
    position: absolute;
left:0px;

来自 Android 模拟器的这张图片:

【讨论】:

【参考方案4】:

为什么不使用type="number" 设置输入并在输入中按下键后使用jQuery 更改类型。

$("input").keydown(function () 
    $(this).prop('type', 'password');
);

如果你犯了错误。您可以清除输入并再次设置type="number"

$("input").click(function () 
    $(this).val('');
    $(this).prop('type', 'number');
);

这是我的第一个答案,希望对您有所帮助。

【讨论】:

【参考方案5】:

使用 type="tel" 和 css mask "disc" 对我有用,但密码管理器(如 LastPass)需要输入 type="password" 才能开始工作。 所以,我的想法是改变输入类型取决于设备。我使用Browser Detection by hisorange (for Laravel):“密码”类型用于桌面,“电话”类型用于移动设备。 CSS:

.password-mask 
        -webkit-text-security: disc;
        -moz-webkit-text-security: disc;
        -moz-text-security: disc;
    

控制器:

 if (Browser ::isMobile() || Browser ::isTablet()) 
    $device = 'm';
  else 
    $device = 'd';
 

刀片:

<input type="$device=='d' ? 'password' :'tel'" 
pattern="[0-9]*" 
class="form-control password-mask $errors->has('password') ? 'invalid' :''"
autocomplete="current-password" id="password" name="password">

【讨论】:

【参考方案6】:
type = "tel"
.class 
    -webkit-text-security: disc;
    -moz-webkit-text-security: disc;
    -moz-text-security: disc;

【讨论】:

仅代码的答案在本网站上通常不受欢迎。您能否编辑您的答案以包含一些 cmets 或对您的代码的解释?解释应该回答这样的问题:它有什么作用?它是如何做到的?它去哪儿了?它如何解决OP的问题?请参阅:How to anwser。谢谢!【参考方案7】:

或者您可以使用 javascript 和 CSS 创建自己的键盘,当用户输入数字时,bisplay * 并将值存储在 javascript 变量中。 就像我做的那样,它使用户登录变得非常流畅和容易……移动优先

【讨论】:

以上是关于使 Input Type="Password" 在移动设备上使用数字键盘的主要内容,如果未能解决你的问题,请参考以下文章

wdatepicker 日期空间 <input type="text"> 时间改变触发事件不好使怎么办

filebeat配置踩坑

将 input type="text" 更改为 input type="password" onfocus()

input(type="checkbox"|type="radio")+jquery使用

为啥 textarea 不是 input[type="textarea"]?

input.type = "数字";但仅适用于特定的输入字段