带有空字符串的JS getElementById:无效的过程调用或参数

时间:2012-11-01 13:24:04

标签: javascript string getelementbyid invalid-argument

我有一个传入参数sCellId的函数。我正在尝试使用

获取其元素
var tdElement = document.getElementById(sCellId)

现在我有一个空检查,我完全希望它有时是null,这很好(if (tdElement))。但是,似乎当传入一个空字符串时,我得到一个例外:

  

无效的过程调用或参数。

在观看中,如果我添加document.getElementById(""),它就可以正常运行并给我null。将sCellId添加到手表中我会得到一个空字符串"",如果我将document.getElementById(sCellId)添加到手表,它会再次显示错误。

以下是观察变量的快照:

enter image description here

这里有什么我想念的吗?

1 个答案:

答案 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();