我在最新的Chrome(35;Win/Android/iOS)和Safari(7;iOS)版本中发现了一个最独特的浏览器功能。如果您有一个带有input type=“number”
的数学表单,并且输入一个带有小数点逗号的数字,浏览器将使用该数字进行计算,就像逗号是一个点一样。如果你输入带有小数点的数字,它们会进行正常的计算,但结果会以小数点逗号显示。也就是说,在我的欧洲(即荷兰语)版本中。我不知道美国版本。
如果你觉得难以置信,我做了一个演示来演示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Demo Browser Behavior w/ Number Inputs</title>
<style>
input {
box-sizing: border-box;
margin-top: 10px;
width: 100px;
}
</style>
</head>
<body>
<form name="theForm">
<input type="number" name="A1field" min="0" max="100" step="0.1"> Input field
<br>
<input type="number" name="A2field" min="0" max="100" step="0.1"> Input field
<br>
<input type="button" value="Calculate" onclick="calculateAndPopulate()">
<br>
<input type="number" name="R1field" min="0" max="10000" step="0.01"> Result field
<br>
<input type="reset" value="Reset">
</form>
<script>
function calculateAndPopulate() {
var A1val = theForm.A1field.value;
var A2val = theForm.A2field.value;
var R1 = (A1val*A2val);
theForm.R1field.value = R1;
}
</script>
</body>
</html>
现场演示:http://codepen.io/anon/pen/xDvCB?editors=100.正如所暗示的,您可能需要一个为使用这种符号的国家制作的版本:4.999,99欧元。输入100以下的任意两个数字:a)每个数字有一个小数点,b)小数点逗号、小数点或其组合。并且对显示的结果感到惊讶-无论输入使用点还是逗号,计算输出总是相同的,并且输出总是以逗号显示。
Firefox30没有这个功能(或者bug,取决于你怎么看),IE9也没有(不知道更高版本)。我想知道的是,是否有人知道该功能的Javascript名称。我想告诉拥有这些网络工具包的访问者,结果可能会很特别。
使用输入类型=数字(转换或转换)逗号(点或句点或“句号”)浏览器功能进行广泛的互联网搜索
并没有给出我需要的答案。我确实看到了一家Chrome制造商的这篇文章,但这只证实了(不太受欢迎的)功能,没有提到它的JS名称。这条索线也没有,这是我能找到的唯一一条索线,接近我想要找到的东西。
我终于弄明白了(花了大约三天的时间)。我本可以问Chrome制造商Javascript的名称是什么,但如果我能让浏览器正常运行,那就更好了。这个问题主要是关于数学形式的,其更广泛的目标是:
这两种方法提供:
强制小数点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math form with forced dot separator</title>
<style>
input {
box-sizing: border-box;
margin-top: 10px;
width: 100px;
}
input[type="tel"]:invalid {
box-shadow: none; /* 0 doesn't work */
}
</style>
</head>
<body>
<h3>Math form with forced dot separator</h3>
<form name="theForm">
<input type="tel" name="A1field"> Input field
<br>
<input type="tel" name="A2field"> Input field
<br>
<input type="button" value="Multiply" onclick="multiplyAndPopulate()">
<br>
<input type="tel" name="R1field"> Result field
<br>
<input type="reset" value="Reset">
</form>
<script>
var telInputs = document.querySelectorAll('input[type="tel"]');
for (var i=0; i<telInputs.length; i++) {
telInputs[i].onblur = function() {
this.value = this.value.replace(',','.');
}
}
function multiplyAndPopulate() {
var A1 = theForm.A1field.value;
var A2 = theForm.A2field.value;
var R1 = (A1*A2);
if (isNaN(R1) == true) {
alert('In one or more input fields you have used more than the allowed one comma or dot, or entered a non-numerical character.');
return false;
}
else {
theForm.R1field.value = R1;
}
}
</script>
</body>
</html>
现场演示:http://codepen.io/anon/pen/bhajB?editors=100.
强制十进制逗号
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Math form with forced comma separator</title>
<style>
input {
box-sizing: border-box;
margin-top: 10px;
width: 100px;
}
input[type="tel"]:invalid {
box-shadow: none; /* 0 doesn't work */
}
</style>
</head>
<body>
<h3>Math form with forced comma separator</h3>
<form name="theForm">
<input type="tel" name="A1field"> Input field
<br>
<input type="tel" name="A2field"> Input field
<br>
<input type="button" value="Multiply" onclick="multiplyAndPopulate()">
<br>
<input type="tel" name="R1field"> Result field
<br>
<input type="reset" value="Reset">
</form>
<script>
var telInputs = document.querySelectorAll('input[type="tel"]');
for (var i=0; i<telInputs.length; i++) {
telInputs[i].onblur = function() {
this.value = this.value.replace('.',',');
}
}
function multiplyAndPopulate() {
var A1 = theForm.A1field.value.replace(',','.'); // not visible
var A2 = theForm.A2field.value.replace(',','.'); // not visible
var R1 = (A1*A2);
if (isNaN(R1) == true) {
alert('In one or more input fields you have used more than the allowed one comma or dot, or entered a non-numerical character.');
return false;
}
else {
theForm.R1field.value = R1;
theForm.R1field.value = theForm.R1field.value.replace('.',',');
}
}
</script>
</body>
</html>
现场演示:http://codepen.io/anon/pen/jqFeJ?editors=100.
.
一些解释:
input type=“tel”
:在iOS和Android上,只有数字输入类型才能打开数字键盘/键盘type=“text”pattern=“[0-9]*”
在Android上不起作用。另外,input type=“number”
会在没有适当通知的情况下,让较旧的Chrome(可能还有Win上的Safaris)删除输入的逗号。4,5无声地变成了45。因此输入type=“tel”
代码的其余部分应该是不言自明的。这些代码已经在IE8/9、Chrome18和35(Win/Android4.1果冻豆)、Safari5(Win)和7(iOS)以及Android自己的浏览器(Android4.1)中进行了测试。
只有一个不完美和一个局限。不完美之处在于Android系统上用于电话号码的数字键盘与普通的数字键盘有点不同,可能会让有经验的Android用户感到惊讶。但是所有必要的钥匙都在,大多数游客甚至不会注意到。限制是访问者每个输入字段只能输入一个逗号或点,即分隔符。你可以事先指示他们。如果他们(仍然)输入更多,它会被验证脚本捕获。
如果你愿意,测试现场演示。如果您仍然发现任何错误或不一致的地方,请留下评论。
在使用“number”类型和值“1,5”的输入发布表单后,浏览器(Chrome 43.0.2357.130,FF 38.0.5)发送带有点作为小数分隔符的数字,但输入具有属性lang=“cs”(在捷克共和国,我们使用十进制逗号),因此对于ASP。NETMVC的格式不正确。 如何设置浏览器(表单/输入)以发送用户真正填写的内容(在我的示例中为“1,5”)? 从浏览器发送的表单数据:
问题内容: 使用以下代码获取字符串并将其转换为二进制: 输出: 如果我将其放到该站点(位于右侧站点)中,则会得到hello回信。我想知道它使用什么方法。我知道我可以将二进制字符串拼接成8,然后将其与相应的值进行匹配或以其他方式进行匹配。真正在寻找更简单的东西。 问题答案: 对于[ -~]Python 2 范围内的ASCII字符: 相反: 在Python 3.2+中: 相反: 要在Python中支持
问题内容: 我用来处理AngularJS中的十进制输入。 如果我使用该选项,它几乎可以按预期工作。对于两个小数,输入如“ 100.333”将转换为“ 100.33”。 在我的区域中,逗号用作小数点分隔符,但我网站上的输入应使用点作为小数点分隔符-就像该插件一样。没关系。但是,我希望将“ 100,33”之类的输入转换为“ 100.33”。 我怎样才能做到这一点? 问题答案: 恐怕我不熟悉:( 但是,
问题内容: 我将如何使用python将IP地址转换为十进制数字,反之亦然? 例如,对于,我想使用易于存储在数据库中的十进制或二进制形式,然后检索它。 问题答案: 将IP字符串转换为长整数: 另一种方式:
问题内容: 我正在尝试将a 转换为原始类型,反之亦然: 奇怪的是,当我尝试将新分配的分配回a时,结果不过是垃圾。 但是,当我使用原始数据类型作为参数时,似乎相同的算法工作得很好。 问题答案: 改用这些。
问题内容: 我正在尝试创建一个函数,该函数可以将月份数字转换为缩写的月份名称,或者将月份的缩写名称转换为月份的数字。我以为这可能是一个常见问题,但我无法在网上找到它。 我在考虑日历模块。我看到可以将月份号转换为缩写的月份名称。不过,我看不出有其他方法可以走。创建用于转换另一个方向的字典是处理此问题的最佳方法吗?还是有更好的方法将月份名称改为月份编号,反之亦然? 问题答案: 使用模块创建一个反向字典