1

I have a function, which has a parameter sCellId passed in. I'm trying to get its element using

var tdElement = document.getElementById(sCellId)

Now I have a null check after it, and I fully expect it to be null sometimes, which is fine (if (tdElement)). However, it seems that when an empty string is passed in, I get an exception instead:

Invalid procedure call or argument.

In the watch, if I add document.getElementById(""), it works fine and gives me null. Adding sCellId to the watch I get an empty string "", and If I add document.getElementById(sCellId) to the watch, it again shows the error.

Here's a snapshot of the watched variables:

enter image description here

Is there something I'm missing here?

4

1 に答える 1

0

私はこれとまったく同じ問題を抱えていましたが、 IE7 または IE8 標準を使用する互換モードでのみ発生する IE のバグのようです。以下のテスト 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 に答える