2013-05-07 60 views
15

我試圖創建一個鏈接,點擊時切換其href屬性,然後轉到該位置。使用jQuery點擊後更改鏈接href

我的HTML是:

<a href="http://google.com" rel="group" data-wpurl="http://yahoo.com"></a> 

點擊時,我想瀏覽器訪問到數據wpurl位置,而不是HREF位置。我使用數據屬性的原因是因爲我使用的應用程序需要使用href ...在這裏不相關。

我jQuery是:

$('a[rel="group"]').on('click', function(e) { 
     e.preventDefault(); 
     var wpurl = $(this).attr("data-wpurl"); 
     $(this).attr('href', wpurl); 
}); 

我使用e.preventDefault();以防止瀏覽器將用戶帶到href。在將數據屬性分配給href後,如何觸發點擊?使用trigger('click')click();不起作用!

任何想法?

+0

它可以完成,但只是好奇的用例... – Ejaz 2013-05-07 17:41:25

+0

我需要的一切,除了移動href ...所以在我的js中,我使用了一個條件語句。我希望鏈接根據屏幕大小觸發不同的網址。 – JCHASE11 2013-05-07 17:43:06

回答

16

這將是容易,只需立即改變位置:

e.preventDefault(); 
location.href = $(this).data('wpurl'); 
+1

這個。如果您要將用戶帶到新頁面,則沒有理由實際更新鏈接的href。 – sgroves 2013-05-07 17:44:14

6

使用onmousedown事件。 Google在其搜索結果頁面上使用此方法,以便他們可以跟蹤您點擊的內容。如果您想查看鏈接的位置,請右鍵單擊而不是左鍵。他們都觸發了沉默的事件。

http://jsfiddle.net/afLE3/

<a href="http://google.com" data-wpurl="http://yahoo.com" onmousedown="rwt(this)">CLICK HERE</a> 

<script type="text/javascript"> 
    rwt = function(e){ 
    e.href = $(e).data('wpurl'); 
    } 
</script> 
2

我認爲你原來的jQuery是很好,除了e.preventDefault():這將停止激發事件,無論你做了到這一點後,href屬性是什麼。

$('a[rel="group"]').on('click', function(e) { 
     var wpurl = $(this).attr("data-wpurl"); 
     $(this).attr('href', wpurl); 
}); 

以上所有代碼將在頁面刷新之前執行。

15

類似的解決方案,但無需調用e.preventDefault()

$('a[rel="group"]').on('click', function(e) { 
    e.originalEvent.currentTarget.href = $(this).data('wpurl'); 
}); 
從我的角度來看

的,這是一個更一般的,清晰的解決方案,因爲這不會改變默認瀏覽器行爲(例如:當用戶點擊鏈接上的鼠標滾輪,用千斤頂解決方案沒有新標籤將被打開)

+0

謝謝你。這是最易讀和最簡單的解釋答案。 – 2015-09-09 04:58:33