HTML Mobile - 强制隐藏软键盘

IT技术 javascript html ipad tablet
2021-03-07 07:16:59

我正在为一家优惠券公司开发前端网站,我有一个页面,用户只需要输入电话号码和花费的 $$。我们想出了一个用 Javascript 构建的有趣的屏幕键盘,它易于使用且速度快。但是,我正在寻找一种解决方案来阻止软键盘在用户聚焦并在这些字段中输入文本/数字时弹出。

我知道 HTML5 提出的“号码/电话/电子邮件”类型属性。然而,冒着听起来很疯狂的风险,我真的只想使用我的屏幕键盘。

注意:本网站主要针对平板电脑。

谢谢。

6个回答

Scott S 的回答非常有效。

我正在为移动设备编写基于 Web 的电话拨号盘,每次用户按下键盘上的数字(由表格中的 td span 元素组成)时,软键盘都会弹出。我还希望用户无法点击正在拨打的号码的输入框。这实际上在 1 次射击中解决了这两个问题。使用了以下内容:

<input type="text" id="phone-number" onfocus="blur();" />
实际上,这个答案比@ScottS 的答案更适合我,没有不尊重他的答案。我怀疑 html 输入语句和 $(document).ready() 之间经过的时间允许键盘触发,而 onfocus=blur(); 会更快,至少在我看来并防止键盘触发,
2021-04-24 07:16:59

由于软键盘是操作系统的一部分,通常情况下,您将无法隐藏它 - 此外,在 iOS 上,隐藏键盘会使元素失去焦点。

但是,如果您onFocus在输入上使用该属性,然后blur()立即输入文本,则键盘将隐藏自身并且onFocus事件可以设置一个变量来定义最后关注哪个文本输入。

然后更改您的页面键盘以仅更改最后一个焦点(使用变量检查)文本输入,而不是模拟按键。

谢谢斯科特。在没有屏幕键盘的情况下,在常规 html 表单上测试时,您的建议非常有效。似乎我正在实现的 jquery mobile 或我正在使用的键盘对象正在创建他们自己的焦点事件,我还没有找到(“焦点”在库中的某个地方命名)。目前,我们的客户喜欢这个想法,但软键盘不断弹出的事实已被关闭,因此我们正在放弃此功能。:(我有兴趣解决这个问题,所以如果有人感兴趣,这里是键盘库: github.com/Mottie/Keyboard
2021-04-22 07:16:59
单击转到按钮后,android 键盘不隐藏?对此有什么想法吗?
2021-05-12 07:16:59
只是一个想法 - 如果您在每个输入上放置一个透明的 div,然后使用 onClick 方法会发生什么?例如:<div style="position:relative; top:0px; left:0px">Text: <input type="text" /><div style="position:absolute; top:0px; left:0px; width:100%; height:100%; opacity:0" onClick="focusbox()"></div></div>父 div 的相对(或绝对)定位导致绝对定位的子级与其父级相关。
2021-05-15 07:16:59

对于更多的读者/搜索者:

正如Rene Pot这个话题上指出的那样

通过将属性readonly(或readonly="readonly"添加到输入字段,您应该防止任何人在其中输入任何内容,但仍然能够在其上启动单击事件。

使用这种方法,您可以避免弹出“软”键盘并仍然启动单击事件/通过任何屏幕键盘填充输入。

此解决方案也适用于通常已经实现控件的日期时间选择器。

readonly="true" 不是有效的 HTML。它应该是 readonly="readonly",或者只是没有属性值的只读
2021-05-03 07:16:59
@carpii:恕我直言,W3C 做出如此糟糕的决定真是太可惜了!!!他们一定有他们的理由...... :-(
2021-05-04 07:16:59

我很困惑为什么没有人提出这个问题......也许我误解了这个问题,但是,

<input inputmode="none" />
您现在也可以使用虚拟键盘 api web.dev/virtualkeyboard
2021-05-05 07:16:59

这些答案还不错,但它们的局限性在于它们实际上不允许您输入数据。我们有一个类似的问题,我们使用条形码阅读器将数据输入到一个字段中,但我们想抑制键盘。

这是我放在一起的,效果很好:

https://codepen.io/bobjase/pen/QrQQvd/

<!-- must be a select box with no children to suppress the keyboard -->
input: <select id="hiddenField" /> 
<span id="fakecursor" />

<input type="text" readonly="readonly" id="visibleField" />
<div id="cursorMeasuringDiv" />

#hiddenField {
  height:17px; 
  width:1px;
  position:absolute;
  margin-left:3px;
  margin-top:2px;
  border:none;
  border-width:0px 0px 0px 1px;
}

#cursorMeasuringDiv {
  position:absolute;
  visibility:hidden;
  margin:0px;
  padding:0px;
}

#hiddenField:focus {
  border:1px solid gray;  
  border-width:0px 0px 0px 1px;
  outline:none;
  animation-name: cursor;
  animation-duration: 1s;
  animation-iteration-count: infinite;
}

@keyframes cursor {
    from {opacity:0;}
    to {opacity:1;}
}

// whenever the visible field gets focused
$("#visibleField").bind("focus", function(e) {
  // silently shift the focus to the hidden select box
  $("#hiddenField").focus();
  $("#cursorMeasuringDiv").css("font", $("#visibleField").css("font"));
});

// whenever the user types on his keyboard in the select box
// which is natively supported for jumping to an <option>
$("#hiddenField").bind("keypress",function(e) {
  // get the current value of the readonly field
  var currentValue = $("#visibleField").val();

  // and append the key the user pressed into that field
  $("#visibleField").val(currentValue + e.key);
  $("#cursorMeasuringDiv").text(currentValue + e.key);

  // measure the width of the cursor offset
  var offset = 3;
  var textWidth = $("#cursorMeasuringDiv").width();
  $("#hiddenField").css("marginLeft",Math.min(offset+textWidth,$("#visibleField").width()));

});

当您单击该<input>框时,它会模拟框中的光标,但实际上将焦点放在一个空<select>框上。选择框自然允许按键支持跳转到列表中的元素,因此只需将按键重新路由到原始输入并偏移模拟光标即可。

这不适用于退格、删除等……但我们不需要这些。您可能可以使用 jQuery 的触发器将键盘事件直接发送到某个地方的另一个输入框,但我们不需要为此烦恼,所以我没有这样做。

非常感谢。你救了我的一天。并将我从 Java 中拯救出来。
2021-04-20 07:16:59
就它的简单使用而言,它很酷!它不适用于条码扫描仪。
2021-05-07 07:16:59
我在我的项目中遇到了类似的问题,我需要使用霍尼韦尔设备的条形码阅读器来输入数据。但是与您的不同,我不必在输入字段中显示它。我所做的是将 keyup 侦听器绑定到整个文档。读取条码时,用于触发每个条码字符的事件。我将它们放入一个数组中,然后转换为字符串。我在我的情况下使用 angular
2021-05-14 07:16:59