允许在HTML5数字输入中使用特殊字符/分数
我有一个html5数字输入:允许在HTML5数字输入中使用特殊字符/分数,html,Html,我有一个html5数字输入: 我希望它能接受分数和混合数,比如38 1/2,以及整数和小数 我在服务器端解析分数 当前,当输入失去焦点时,浏览器会将输入更改为38 当前的解决方法是使用纯文本输入,但我希望使用type=“number”的好处,例如移动设备上的特定键盘。定义元素以创建与浏览器相关的、与浏览器区域设置相关的输入控件,用于输入数字。除了可以使用属性指定范围和精度之外,无法在文档中更改这一点。因此,浏览器可以接受38 1/2,并在内部将其转换为38.5,但没有办法说它应该这样做,更不用说
我希望它能接受分数和混合数,比如38 1/2,以及整数和小数
我在服务器端解析分数
当前,当输入失去焦点时,浏览器会将输入更改为38
当前的解决方法是使用纯文本输入,但我希望使用type=“number”
的好处,例如移动设备上的特定键盘。定义
元素以创建与浏览器相关的、与浏览器区域设置相关的输入控件,用于输入数字。除了可以使用属性指定范围和精度之外,无法在文档中更改这一点。因此,浏览器可以接受38 1/2,并在内部将其转换为38.5,但没有办法说它应该这样做,更不用说强迫它这样做了。此外,严格定义了数字的内部格式(传递给服务器时);例如,它不能是38 1/2
因此,您需要使用纯文本输入或一些特殊的小部件(用JavaScript编程)。您可以使用模式
属性以某种方式指定允许的格式,至少指定允许的字符集;这可能会也可能不会影响触摸设备上显示的屏幕键盘(对于当前设备,可能不会)。定义
元素以创建与浏览器相关的、与浏览器区域设置相关的输入控件,用于输入数字。除了可以使用属性指定范围和精度之外,无法在文档中更改这一点。因此,浏览器可以接受38 1/2,并在内部将其转换为38.5,但没有办法说它应该这样做,更不用说强迫它这样做了。此外,严格定义了数字的内部格式(传递给服务器时);例如,它不能是38 1/2
因此,您需要使用纯文本输入或一些特殊的小部件(用JavaScript编程)。您可以使用
模式
属性以某种方式指定允许的格式,至少指定允许的字符集;这可能会也可能不会影响触摸设备上显示的屏幕键盘(对于当前设备,可能不会)。我们最近遇到了同样的问题
我们的目标是
type='number'
,大多数桌面浏览器都会阻止我们输入斜杠字符。在mobile Safari中,我们可以输入斜杠(例如2/3),但浏览器将该值转换为空字符串,因为它不是严格意义上的数字
我们的解决方案是将要显示数字键盘的设备的输入类型临时更改为number
我们的解决方案如下所示:
var elmInput = document.getElementById("elmID");
if (/(iPad|iPhone|iPod|Android)/g.test(navigator.userAgent)) {
elmInput.setAttribute("type", "number");
elmInput.focus(); // brings up numeric keyboard
setTimeout(function () {elmInput.setAttribute("type", "text"); }, 200);
}
我们已经在几个iOS设备上进行了测试,我们看到了预期的行为。显然,此解决方案仅限于这些设备。此外,如果用户在不到200毫秒的时间内提交表单,那么他将遇到前面提到的空字符串问题
我们的情况显然是独一无二的,因为我们只处理一个可以触发焦点的因素。然而,使用CSS类选择器也可以使用类似的方法。对于移动设备,您可以将type设置为
number
,然后在关注时返回到text
。我们最近遇到了相同的问题
我们的目标是
type='number'
,大多数桌面浏览器都会阻止我们输入斜杠字符。在mobile Safari中,我们可以输入斜杠(例如2/3),但浏览器将该值转换为空字符串,因为它不是严格意义上的数字
我们的解决方案是将要显示数字键盘的设备的输入类型临时更改为number
我们的解决方案如下所示:
var elmInput = document.getElementById("elmID");
if (/(iPad|iPhone|iPod|Android)/g.test(navigator.userAgent)) {
elmInput.setAttribute("type", "number");
elmInput.focus(); // brings up numeric keyboard
setTimeout(function () {elmInput.setAttribute("type", "text"); }, 200);
}
我们已经在几个iOS设备上进行了测试,我们看到了预期的行为。显然,此解决方案仅限于这些设备。此外,如果用户在不到200毫秒的时间内提交表单,那么他将遇到前面提到的空字符串问题
我们的情况显然是独一无二的,因为我们只处理一个可以触发焦点的因素。然而,使用CSS类选择器也可以使用类似的方法。对于移动设备,您可以将type设置为
number
,然后在聚焦时变回text
。这些“移动设备上的特定键盘”不会显示小数字符吗?嗯,在安卓上似乎会。对于iOS Safari,它只会显示键盘上带有数字的特殊字符“页面”。这些“手机上的特定键盘”不会显示分数字符吗?嗯,在Android上似乎会。对于iOS Safari,它只会显示键盘上有数字的特殊字符“页面”。模式不允许我指定数字、小数和/
以影响手机键盘的方式+1,但是。模式
不允许我以影响手机键盘的方式指定数字、小数和/
s+1,尽管如此。