我有一个传入参数sCellId
的函数。我正在尝试使用
var tdElement = document.getElementById(sCellId)
现在我有一个空检查,我完全希望它有时是null
,这很好(if (tdElement)
)。但是,似乎当传入一个空字符串时,我得到一个例外:
无效的过程调用或参数。
在观看中,如果我添加document.getElementById("")
,它就可以正常运行并给我null
。将sCellId
添加到手表中我会得到一个空字符串""
,如果我将document.getElementById(sCellId)
添加到手表,它会再次显示错误。
以下是观察变量的快照:
这里有什么我想念的吗?
答案 0 :(得分:0)
我有同样的问题,并且它似乎是IE中的一个错误,只有在使用IE7或IE8标准的兼容模式下才会出现 。我能够使用下面的测试HTML页面在IE 9和IE 11中重现。如果我没有启用compat模式,那么页面加载没有任何错误。
<!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
在运行时设置为空字符串,但(compat mode)修复涉及更改此行:
var fieldID = document.getElementById('TestHiddenField').value;
将空字符串附加到隐藏字段值似乎可以修复错误:
var fieldID = document.getElementById('TestHiddenField').value + '';
奇怪的是,如果你更改它以使用.toString()
函数,那么它不起作用,你仍然会收到错误:
var fieldID = document.getElementById('TestHiddenField').value.toString();