2016-05-18 136 views
1

我無法理解爲什麼這不起作用。提交窗體關閉窗口

我有一個表格在新標籤打開,我想在提交時關閉:

<form name="form" id="form" method="post" enctype="multipart/form-data" > 
    //form inputs 
    <button accesskey="C" class="boton" onclick="form.submit(); alert('waiting...'); window.close()"> <u>A</u>djuntar</button> 

</form> 

當我刪除window.close()的形式提交,但是當它在我的代碼,它顯示警報但不提交。

有什麼問題嗎?

+0

您是否打開JS窗口?我不相信你可以關閉任何舊的窗口,它必須是一個創建(作爲一種安全措施)另外,我不知道你是否能關閉與JS *標籤不惜一切*了,雖然'。 close()'確實曾經工作過 – DBS

+0

按鈕可能只關閉由它打開的窗口。請參考'的https:// developer.mozilla.org /德/文檔/網絡/ API /窗/ close' –

+0

嘗試的onclick =「form.submit();警報( '等待...'); window.close( );」 –

回答

-2

您不能僅通過window.close()方法關閉任何窗口。從未提交表格,因爲window.close()失敗。

Window.close()方法關閉當前窗口或關於它被調用的窗口 。

此方法僅允許通過使用window.open()方法的腳本爲打開 的窗口調用。如果窗口不是由腳本打開的 ,則JavaScript中會顯示以下錯誤 控制檯:腳本可能無法關閉未由腳本打開的窗口。

https://developer.mozilla.org/en-US/docs/Web/API/Window/close

+2

我想你已經誤解了這個問題。看起來OP的問題是窗體關閉時窗體不提交,而不是窗體關閉。 – Quentin

0

形式將不會被提交,直到事件處理函數完成運行。

alert阻止所有事情的執行,直到對話框被解除。

close關閉窗口,所以無處可載入表單提交到,取消請求。


如果您要關閉一個窗口,不要指望它能夠同時發送HTTP請求。

-2

HTML:

<form name="form" id="form" method="post" enctype="multipart/form-data"> 
     //form inputs 
     <button accesskey="C" class="boton" onclick="form.submit();" > <u>A</u>djuntar</button> 

    </form> 

JS:

form.addEventListener("submit", myFunc); 

function myFunc() { 
    alert('waiting...'); 
    window.close() 
} 

她我們創建了一個事件,它是submited

以JS腳本標籤,如果你將測試它關閉窗口:)

+2

這只是將一些代碼移入不同的事件處理程序。它具有原始代碼所具有的所有問題以及相同的原因。 – Quentin

+0

「當我刪除window.close()表單提交時,但當它在我的代碼中時,它顯示警報但不提交。」現在我們知道它有 – sv88erik

+2

觸發提交事件並不意味着表單實際上將提交。您仍然可以取消提交。通常的做法是調用event.preventDefault(),但也可以通過解決提交表單觸發的HTTP請求來解決。 *關閉窗口*會做到這一點。 – Quentin

-1

你可能已經找到了一個解決方案,但我發佈這個反正任何人誰co mes在未來會一樣。

我正在使用Java servlets,但我認爲這與每個表單提交=>的能力相同,以便能夠選擇在發佈數據處理後必須顯示哪個頁面。

一旦我提交了表單,servlet中的doPost方法允許我說明在處理完數據之後,我希望瀏覽器顯示哪個URL。

所以,你可以做可能做的東西沿着這些路線:

request.getRequestDispatcher ("/ClosePopup.html").forward (request, response); 

也能創建一個名爲ClosePopup.html文件中,只是一個接近()指令

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
    </head> 
    <body onLoad = "window.close();"> 
    </body> 
</html> 

這樣它不會是您點擊的按鈕來觸發彈出窗口的關閉,但是您將在提交表單後加載自毀頁面。最終結果是相同的。

+0

對於貶低它的人:出了什麼問題?它適用於我,但如果你沒有得到相同的結果,那麼也許我可以想到一個解決方案,可以應用於更多的案例,根據我發佈的內容 – Dan

0

你不必在一個新窗口(或標籤)來打開表單。 您可以使用ajax提交數據,也可以使用內部隱藏的iframe作爲表單元素的目標屬性。通過這種方式,表單將在隱藏的內部元素中打開。例如:

<form id="eFrm" target="ifrm1"> 
</form> 
<iframe id="ifrm1" name="ifrm1" style="display:none"></iframe>