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