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

Javascript JS函数不适用于Internet Explorer中的多个输入文本字段,javascript,html,internet-explorer,function,Javascript,Html,Internet Explorer,Function,我正在尝试检查该字段以确定它是否是一个数字(除此之外没有非数字字符)。如果字段的值是数字,请将其转换为两位小数格式。目前该代码在FireFox和Chrome中运行,但我在Internet Explorer(多个版本,专门在IE8和IE9上测试)方面遇到了问题。我已经胡闹了几个小时,还没有找到解决问题的办法。在Internet Explorer中,只有第一个字段工作正常。其他字段工作不正常,Internet Explorer不会触发错误 这是html文件中的相关代码: <!DOCTYPE h

我正在尝试检查该字段以确定它是否是一个数字(除此之外没有非数字字符)。如果字段的值是数字,请将其转换为两位小数格式。目前该代码在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>
我将在这里浏览更多的线程,看看是否找不到解决方案

提前感谢您的帮助。

使用此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);"/>
<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" />
演示:

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

而且,不需要正则表达式。只需尝试使用
parseFloat
解析值即可。如果成功,则用2位小数修复数字,并重新设置输入值。否则,请清除文本框

更新:

虽然这一切都可以正常工作,但我建议不要使用内联事件处理程序。例如,最好使用以下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);"/>
<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" />

而不是
parseFloat
行。

复制粘贴错误
if(myvalue!=“”&&&!pattern.text(myvalue))
@jbabey-好眼力,应该是
test
(或match)!不要将
this.id
传递给函数,只需传递
this
。然后,您可以使用
input
获取元素,使用
input.value
获取元素值,以及使用
input.whatever获取任何其他内容。您可以删除整个
文档.getElementById
部分。这并不能解决任何问题,它只是对文本的一个建议操作,而不是测试部分,但在实际文件中是正确的。谢谢你的提示,伊恩,这似乎很方便。我不知道我可以这么做。这肯定会让代码更干净,谢谢。由于某些原因,该代码在IE8或IE9中对于字段2-5似乎仍然不起作用。不知道那里发生了什么。我希望internet explorer只是在getElementById方面遇到了一些问题。@user229219在我们的两个代码中都没有不适合IE的东西。你知道IE有奇怪的缓存,对吧?您的代码位于外部文件中,该文件将立即被缓存。也就是说,如果您进行了更改并重新访问您的页面,您的更改很可能不会被应用。你需要清除缓存。你确定那不是问题吗?我的JSFIDLE可以工作,不是吗?我可能做了一些不正确的事情,但JSFIDLE似乎不适用于我的IE8浏览器。它确实可以在Chrome中正常加载。好吧,你最近更新的解决方案在IE中也能正常工作。我仔细查看了我的代码,发现我的第一个字段使用的是onBlur,第2-5个字段使用的是onChange。Internet Explorer不支持onChange吗?谢谢你帮我找到解决办法@USER229219我认为JSFIDLE不适用于比IE版本9更旧的版本……但不确定。IE应该不会在
onchange
事件中遇到任何问题……所有浏览器都支持它。所以我不确定这会有什么问题。帮忙没问题,很高兴我们能解决:)
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);
        }
    }
};
myvalue = +myvalue;