2012-09-12 73 views
0

Private Logistics: Privacy-Sensitive Calendar, Todo, and Personal Information Management,進入正題可以用點擊來編輯的數據,並沒有對任何進入的鏈接作爲< A HREF =」 ...或輸入一個網址,這將是linkified支持。如何在jQuery中製作「reverse preventDefault」?

該作品很棒,但是當有人點擊一個鏈接時會出現問題,期望的行爲是打開鏈接,而不是將文本片段放入編輯模式,這與'event.preventDefault()'實現的常見模式相反。 '或'... return false;}'(點擊鏈接外的元素應該將包含元素置於編輯模式,與沒有鏈接的容器相同)。

我怎樣才能扭轉更常見的模式使用jQuery?我現在最好的猜測是試圖對事件目標進行反思,看看它是否是一個主播。但這只是一個最好的猜測。我已經看到了很多模式的例子,它們會取消加載另一個頁面的鏈接,但執行將容器置於編輯模式的附加Ajax功能;我不確定我是否看到了該鏈接後面的模式,並且沒有將容器置於編輯模式。

我也看到一種方法來避免鏈接加載在同一頁面的問題,但這是我喜歡只採用的解決方案,如果有實施或類似的棘手問題。

+0

它是一個選項,只是沒有攔截的鏈接點擊,但只在您生成的可編輯元素的白名單? (例如,使用CSS類)。然後,您可以附加一個處理程序,該程序會在您使用鏈接創建的鏈接上調用['stopPropagation()'](http://api.jquery.com/event.stopPropagation/)。 – millimoose

+0

即使點擊鏈接也能做些什麼,它只會帶你到鏈接的頁面,所以無論如何不會有問題,對吧? – sachleen

+0

stopPropagation阻止事件向上遊傳播; preventDefault停止元素的默認行爲;返回false會做兩個。您遇到的問題聽起來像是您在有效鏈接上發生了單擊事件,從而阻止了錨點的默認行爲。我的建議是更具體的哪些錨元素通過修改選擇器來實現該點擊事件。 – Nicodemeus

回答

0

通常,您不想清理寬泛的筆畫,而是不要進行如此寬泛的筆畫。在運行e.preventDefault()之前使用if聲明。

喜歡的東西:

var preventedLinks = $('a.preventthislink'); 
$('a').click(function(e){ 
    if ($(this).index(preventedLinks) != -1) { 
     e.preventDefault(); 
    } 
}); 
+0

如果我正確地閱讀了你的內容,你可以對event.preventDefault()技術進行精煉的視圖,在防止鏈接打開並讓該行進入編輯模式方面更加複雜。但我想要的是打開鏈接,而不是將行放在編輯模式中,這與您通常使用preventDefault()的方式完全相反。這是否完全相反?它看起來像一種更精確的做我不想做的事。 – JonathanHayward

+0

不,這不符合你的要求,我建議而不是在事後處理,搶先解決問題。 –

0

你可以或者只是改變了類無論你是防止在默認的:

$(document).ready(function(){ 
    $('.blue').removeClass('blue').addClass('green'); 
});