2016-05-19 87 views
0

新標籤有條件打開URL我有其中用戶選擇了多個複選框並隨後按下一個調查狀web應用「提交」按鈕狀鏈路經由JS

<!-- page: /survey --> 
<form id="survey" method="post" action="/complete"> 
    <!-- checkboxes, etc here --> 
    <a id="submit" class="button" href="#">Submit</a> 
</form> 
<script> 
    $('#submit').on('click', function (e) { 
     e.preventDefault(); 
     //... other staff happens here 
     $('#survey').submit(); 
    }); 
</script> 

然後形式被處理上服務器和結果將顯示給用戶/complete頁面。

我想實現的是有條件地在提交表單後打開一個新選項卡。調查提交後,此條件和選項卡的URL將在服務器上確定。

我可以把它無條件地工作,如果我插window.open('...', '_blank')到初始/survey頁面上的點擊事件處理程序:

$('#submit').on('click', function (e) { 
    e.preventDefault(); 
    //... other staff happens here 
    window.open('http://example.com', '_blank'); // <---- this line 
    $('#survey').submit(); 
}); 

它未能不過,如果我的/complete頁面上使用window.open:會彈出一個警告代替。可能是因爲它沒有連接到任何用戶發起的事件。

但是,在我的情況下,有一個用戶啓動的事件,但它發生在前一頁。有什麼辦法可以傳遞這個事件到新的頁面(顯然新頁面是在相同的域名,協議等)。可能有另一種方式?

+0

沒有足夠的信息提供給真正的最佳解決方案。但是,一些想法是:1)有條件地向用戶顯示下一頁上的鏈接以打開窗口(並防止彈出窗口阻止程序)。 2)通過實現AJAX調用並在重定向之前有條件地顯示彈出窗口,在同一頁面上顯示彈出窗口。 –

+1

你爲什麼要用鏈接代替'

回答

2

做你以後正確的做法是改變的標記:

<form id="survey" method="post" action="/complete"> 
    <!-- checkboxes, etc here --> 
    <button type="submit" id="submit" class="button">Submit</button> 
</form> 

然後在JavaScript中,監聽submit事件。這將允許本地功能—,如隱式提交(在文本字段中輸入密鑰),或者中鍵點擊提交按鈕—以默認工作。

現在我這裏還有一些重要的部分:

  • 只阻止默認行爲,如果你想要的形式在新標籤中打開輸入無效
  • ,改變形式的target屬性。
$('#survey').on('submit', function (e) { 
    if (!checkValidity(...)) { 
     e.preventDefault(); 
     return; 
    } 

    //other stuff happens 

    var newTab = shouldOpenInNewTab(...); 
    $(this).attr('target', newTab ? '_blank' : ''); 
}); 

這樣做,將允許瀏覽器使用其默認行爲。它是跨瀏覽器兼容的,並且可以訪問。