我遇到了同样的问题,这似乎是 IE 中的一个错误,仅在使用 IE7 或 IE8 标准的兼容模式下才会出现。我能够使用下面的测试 HTML 页面在 IE 9 和 IE 11 中重现。如果我不启用兼容模式,则页面加载时不会出现任何错误。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<script type="text/javascript">
function runTest(ElementId) {
document.getElementById(ElementId);
}
window.onload = function () {
var fieldID = document.getElementById('TestHiddenField').value;
//DEBUG OTUPUT: you can un-comment this for more detailed output
//console.info("fieldId value: \"" + fieldID + "\""); //outputs: ""
//console.info("typeof(fieldId): " + typeof (fieldID)); //shows correctly as string
//console.info('fieldId.length: ' + fieldID.length); //0 length, so empty string.
//if (fieldID == "") {
// console.info("fieldId value matches to empty string");
//}
runTest(fieldID); //SCRIPT5: Invalid procedure call or argument
}
</script>
</head>
<body>
This is a test.
<input type="hidden" value="" id="TestHiddenField" />
</body>
</html>
尽管上面的所有调试输出都显示该变量fieldID
在运行时设置为空字符串,但(兼容模式)修复涉及更改此行:
var fieldID = document.getElementById('TestHiddenField').value;
将空字符串附加到隐藏字段值似乎可以修复错误:
var fieldID = document.getElementById('TestHiddenField').value + '';
奇怪的是,如果你把它改成使用这个.toString()
函数,那么它就不起作用了,你仍然会得到错误:
var fieldID = document.getElementById('TestHiddenField').value.toString();