1

我有一个函数,它sCellId传入了一个参数。我正在尝试使用它来获取它的元素

var tdElement = document.getElementById(sCellId)

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

无效的过程调用或参数。

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

这是观察变量的快照:

在此处输入图像描述

我在这里缺少什么吗?

4

1 回答 1

0

我遇到了同样的问题,这似乎是 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();
于 2014-11-10T20:18:19.060 回答