gpt4 book ai didi

javascript - JS 函数不适用于 Internet Explorer 中的多个输入文本字段

转载 作者:行者123 更新时间:2023-11-28 09:12:59 25 4
gpt4 key购买 nike

我正在尝试检查该字段以确定它是否是数字(除了 . 之外没有非数字字符)。如果字段的值是数字,请将其转换为两位小数格式。目前该代码可以在 FireFox 和 Chrome 中运行,但我在使用 Internet Explorer 时遇到问题(多个版本,专门在 IE8 和 IE9 上进行了测试)。我已经搞砸了几个小时了,但无法找到问题的解决方案。在 Internet Explorer 中,只有第一个字段可以正常工作。其他字段无法正常工作,并且 Internet Explorer 不会触发错误。

这是html文件中的相关代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head>
<script type="text/javascript" src="amount.js"></script>
</head>

<body>
<input type="text" id="amount1" onChange="changeAmount(this.id);"/>
<input type="text" id="amount2" onChange="changeAmount(this.id);"/>
<input type="text" id="amount3" onChange="changeAmount(this.id);"/>
<input type="text" id="amount4" onChange="changeAmount(this.id);"/>
<input type="text" id="amount5" onChange="changeAmount(this.id);"/>
</body>
</html>

这是 amount.js 中的相关代码:

function changeAmount(input)
{
var pattern = /([^0-9\.])+/;
var ctl = document.getElementById(input);
var myvalue = ctl.value;

if(myvalue != "" && !pattern.test(myvalue))
{
myvalue = parseFloat(myvalue);
myvalue = myvalue.toFixed(2);
if(!pattern.test(myvalue))
{
ctl.value = myvalue;
}else
{
ctl.value = '';
}
}
}

我将在这里浏览更多线程,看看是否找不到解决方案。

感谢您提前提供的任何帮助。

最佳答案

使用此 HTML:

<input type="text" id="amount1" onChange="changeAmount(this);"/>
<input type="text" id="amount2" onChange="changeAmount(this);"/>
<input type="text" id="amount3" onChange="changeAmount(this);"/>
<input type="text" id="amount4" onChange="changeAmount(this);"/>
<input type="text" id="amount5" onChange="changeAmount(this);"/>

尝试使用这个 JavaScript:

function changeAmount(input) {
var myvalue = input.value;
myvalue = parseFloat(myvalue);
if (!isNaN(myvalue)) {
input.value = myvalue.toFixed(2);
} else {
input.value = "";
}
}

演示: http://jsfiddle.net/7rDeg/4/

它使用我建议的更改,将 this 而不是 this.value 传递给函数。

此外,不需要正则表达式。只需尝试使用 parseFloat 解析该值即可。如果成功,则将数字修正为小数点后两位,并重新设置输入的值。否则,清除文本框。

更新:

虽然这应该一切正常,但我建议不要使用内联事件处理程序。例如,最好使用以下 HTML:

<input type="text" id="amount1" />
<input type="text" id="amount2" />
<input type="text" id="amount3" />
<input type="text" id="amount4" />
<input type="text" id="amount5" />

使用这个 JavaScript:

function changeAmount() {
var myvalue = this.value;
myvalue = parseFloat(myvalue);
if (!isNaN(myvalue)) {
this.value = myvalue.toFixed(2);
} else {
this.value = "";
}
}

function addEvent(element, eventName, callback) {
if (element.addEventListener) {
element.addEventListener(eventName, callback, false);
} else if (element.attachEvent) {
element.attachEvent("on" + eventName, callback);
} else {
element["on" + eventName] = callback;
}
}

window.onload = function () {
var inputs = document.getElementsByTagName("input");
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].type === "text") {
addEvent(inputs[i], "change", changeAmount);
}
}
};

演示: http://jsfiddle.net/7rDeg/6/

注意:使用parseFloat,它将去除所有尾随的非数字字符。例如,输入“234.35234a”将被解析为“234.35234”(因此传递 !isNaN(myvalue) 条件)并固定为“234.35”。如果您不希望发生这种情况,请使用:

myvalue = +myvalue;

而不是 parseFloat 行。

关于javascript - JS 函数不适用于 Internet Explorer 中的多个输入文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com