0

我在 jsp 表单中有两个单选按钮(遍历和直接)。遍历用于正常提交表单,直接用于使用 iframe 提交表单。使用 iframe 提交表单后,如果我尝试正常提交,则应用程序正在新打开window.如何防止表单在新窗口中打开。

function submitAction() {       
        var fileValue = document.getElementById("file1").value;     
        if (fileValue == "") {
            alert("Please uploaded file type of .war or .html type");
            return false;

        }           
        var valuePassed = getCheckedRadio();
        var url="uploadfile.do?rad=" + valuePassed;     
        if (valuePassed == "traverse") {                    
            document.EntryForm.action = url; 
            document.EntryForm.submit();    //Normal way of submitting.                         
        }else if (valuePassed == "direct") {
            alert("direct");    
            url=url+"&fileName="+fileValue;             
            directConvert(document.EntryForm,url,'downloaddiv');                }
    }



function directConvert(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)',50);
            }

        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");  
        form.submit();              
    }

当我第一次尝试遍历时,它工作正常,但通过 iframe 提交后,如果我尝试遍历,它会在新窗口中打开。如何防止它在新窗口中打开。

4

1 回答 1

0

因为您正在将form对象传递EntryForm给 iframe 并在form.setAttribute("target", "upload_iframe");提交时directConvert更改。

因此,form即使您尝试通过提交,目标仍然如此,traverse但由于已从页面iframe中删除 ( setTimeout('iframeId.parentNode.removeChild(iframeId)',50);),它在提交后会在新窗口中打开,而不是iframe.

因此,您可以将其改回target提交:_selftraversedocument.EntryForm.target = "_self"

顺便说一句,target属性在 HTML 4.01中已被弃用。

于 2012-09-14T10:58:51.387 回答