2016-11-21 101 views
0

我有以下的HTML標記爲什麼「在新選項卡中打開」發送GET請求?

<a href="#" id="navBar_navBarInput_3_subNavDropdownInput_0_subNavLinkInput_0" onclick="redirectPost(4,'EntryData.aspx');">My Link</a> 

JavaScript的「redirectPost」

function redirectPost(id, url) { 
      post(url, { id: id }); 
     } 

function post(path, params, method) { 
      method = method || "post"; 
      var form = document.createElement("form"); 
      form.setAttribute("method", method); 
      form.setAttribute("action", path); 

      for (var key in params) { 
       if (params.hasOwnProperty(key)) { 
        var hiddenField = document.createElement("input"); 
        hiddenField.setAttribute("type", "hidden"); 
        hiddenField.setAttribute("name", key); 
        hiddenField.setAttribute("value", params[key]); 

        form.appendChild(hiddenField); 
       } 
      } 

      document.body.appendChild(form); 
      form.submit(); 
     } 

這裏的交易:當我只需點擊鏈接時,頁面將定期POST請求。但是每當我使用「在新選項卡中打開」選項時,它會發送一個GET請求,這對我來說是一個問題,因爲我做了一些驗證背景。

有沒有人有任何想法爲什麼這樣表現?

謝謝!

回答

1

因爲點擊鏈接會激活點擊處理程序;右鍵單擊它並選擇「在新選項卡中打開」不會,它只會讀取href並使用它打開一個新選項卡。

在某些瀏覽器上,您可以通過掛鉤contextmenu事件並阻止其默認操作來覆蓋上下文菜單。但是,這並不適用於所有瀏覽器。基本上,如果你的鏈接不是一個真正的鏈接,而是一個按鈕,它應該是button(或input type="button"),而不是a。你可以設計這些風格,看看你希望他們看起來如何。使用正確的元素將有助於瀏覽器爲該元素的用戶提供正確的選項。

1
  1. 您無法在新選項卡中打開javascript。

  2. 你可以使用onclick="return redirectPost...."並添加return false給你的函數或event.preventdefault()到開始的結束,但仍然不會允許你使用鼠標右鍵在新標籤頁中打開

  3. ,但只是改變你的鏈接到一個提交按鈕,然後像往常一樣提交表單,提交隱藏字段的設置

+0

此外,'form.submit'將覆蓋鏈接的以下內容,因此不需要返回'(儘管當然這是最好的)。 –

+0

如果在腳本 – mplungjan

+1

:-)中出現錯誤,在頂部的preventDefault將是最好的。一般來說,現代事件處理,真的...... –