Microsoft JScript运行时错误:无法获取属性“removeChild”的值:object为null或undefined

时间:2013-05-31 06:09:52

标签: c# javascript asp.net-mvc-3 razor

我正在开发一个asp.net mvc 3应用程序。标题告诉我有什么问题。我将描述我是如何得到这个错误的。

我正在使用JavaScript从我的剃刀视图上传图片。脚本不长,所以我会在这里发布:

function fileUpload(form, action_url, div_id) {
        // Create the iframe...
        var iframe = document.createElement("iframe");
        iframe.setAttribute("id", "upload_iframe");
        iframe.setAttribute("name", "upload_iframe");
        iframe.setAttribute("width", "0");
        iframe.setAttribute("height", "0");
        iframe.setAttribute("border", "0");
        iframe.setAttribute("style", "width: 0; height: 0; border: none;");

        // Add to document...
        form.parentNode.appendChild(iframe);
        window.frames['upload_iframe'].name = "upload_iframe";

        iframeId = document.getElementById("upload_iframe");

        // Add event...
        var eventHandler = function () {

            if (iframeId.detachEvent) iframeId.detachEvent("onload", eventHandler);
            else iframeId.removeEventListener("load", eventHandler, false);

            // Message from server...
            if (iframeId.contentDocument) {
                content = iframeId.contentDocument.body.innerHTML;
            } else if (iframeId.contentWindow) {
                content = iframeId.contentWindow.document.body.innerHTML;
            } else if (iframeId.document) {
                content = iframeId.document.body.innerHTML;
            }

            document.getElementById(div_id).innerHTML = content;

            // Del the iframe...
            setTimeout('iframeId.parentNode.removeChild(iframeId)', 250);
        }

        if (iframeId.addEventListener) iframeId.addEventListener("load", eventHandler, true);
        if (iframeId.attachEvent) iframeId.attachEvent("onload", eventHandler);

        // Set properties of form...
        form.setAttribute("target", "upload_iframe");
        form.setAttribute("action", action_url);
        form.setAttribute("method", "post");
        form.setAttribute("enctype", "multipart/form-data");
        form.setAttribute("encoding", "multipart/form-data");

        // Submit the form...
        form.submit();

        document.getElementById(div_id).innerHTML = "Uploading...";
        form.setAttribute("action", '/forms/displayform');
    }

通过使用这个脚本,我在我的控制器中获取了我的业务逻辑中的图像,所以我不确定它是否真的是造成这种情况的脚本,但我在调试时找不到其他原因。因此,当控制器完成其工作后,我在Visual Studio 2010中打开了一个标题为Script block[dynamic]的新选项卡,并且代码如下:

function anonymous()
{
iframeId.parentNode.removeChild(iframeId)
}

这实际上是我的JavaScript的一部分:

    // Del the iframe...
    setTimeout('iframeId.parentNode.removeChild(iframeId)', 250);

我对JS有非常基本的了解。我使用这段代码,但我不理解它的某些部分。在这里 - 通过注释和代码本身有点明显发生了什么,但如果我评论这个并尝试上传图像我没有得到错误,这是非常诱人的事情,但我认为最有可能的代码是好的,并且获得此错误的原因是在其他地方,所以我在这里发布以获得有关可能导致此错误的任何帮助以及如何修复它?

P.S

这是我用于上传图片的表单:

@using (Html.BeginForm("Upload", "Forms", FormMethod.Post))
{
    <input name=@Model[0].DocumentId type="hidden" />

    <input type="file" name="datafile" id="file" onchange="readURL(this);" />
    <input type="button" name="Button" value="Upload Image" id="UploadButton" onclick="fileUpload(this.form,'/forms/upload','uploadImg'); return false;"/>
    <div id="uploadImg" style="display: inline-block;">
        <img id="blah" src="#" alt="your image" style="display:none;"/>
    </div>
}

1 个答案:

答案 0 :(得分:0)

这是setTimeout

的语法
setTimeout(function(),milliseconds);

所以,你应该做这样的事情

setTimeout(function(){
           iframeId.parentNode.removeChild(iframeId);
           }, 250);