我在頁面上有一組鏈接。當用戶點擊一個鏈接時,它會觸發一個異步請求,頁面上的內容區域會用響應html進行更新。如何防止中間按鈕在瀏覽器中打開新選項卡?
這工作正常,除非用戶用'中間按鈕'(或鼠標滾輪,不管它叫什麼!)點擊鏈接。然後打開一個新選項卡,並將響應返回並呈現給該選項卡。
有什麼方法可以防止這種情況發生?
我在頁面上有一組鏈接。當用戶點擊一個鏈接時,它會觸發一個異步請求,頁面上的內容區域會用響應html進行更新。如何防止中間按鈕在瀏覽器中打開新選項卡?
這工作正常,除非用戶用'中間按鈕'(或鼠標滾輪,不管它叫什麼!)點擊鏈接。然後打開一個新選項卡,並將響應返回並呈現給該選項卡。
有什麼方法可以防止這種情況發生?
用javascript捕捉鏈接並覆蓋默認鏈接行爲。
這樣的:
$('a.ajax').click(function(e){
e.preventDefault();
// do ajax stuff, and add an onfinish function that does
// something like document.location.href = this.attr('href');
});
你不必做document.location.href,正如我剛纔注意到一個內容區域進行更新。只需使用e.preventDefault()捕獲默認行爲;
//編輯 preventDefault不會停止鼠標中鍵...您是否考慮過不使用標籤?我知道它應該是可訪問的,所以也許是一個包含鏈接的跨度,所以你可以在span上添加onclick事件,並用css隱藏鏈接?
不幸的是,不會出於安全原因,Javascript無法訪問該類控件,因爲它可能會被濫用。
對於期待他正常的瀏覽器行爲的用戶(即他所要求的),它也只是令人煩惱 - 如果他們使用輔助功能工具則更糟糕。 – Rushyo 2010-08-26 08:52:20
@Rushyo對此有一些合理的用途,比如ajax鏈接在自己的窗口中打開時沒有意義。您希望它看起來像一個鏈接,並使用鏈接標記來支持輔助功能,但是您希望點擊該標籤始終發出ajax請求,並且永遠不會在其自己的標籤中實際導航到該位置。 – AaronLS 2012-08-21 20:20:42
@AaronLS您有兩個目標:提供輔助功能支持並提供點擊事件。將兩者分開。鏈接不是假裝成鏈接的鏈接不提供可訪問性,這是欺騙符合性檢查器的懶惰手段,它具有各種奇怪的語義,使其不適用於可訪問的,語義清晰的網頁。 – Rushyo 2012-08-22 13:02:35
我實施了你的建議,添加一個跨度的鏈接。這不是理想的,但它的工作原理。 – DaveDev 2010-08-30 15:03:49