2010-07-29 25 views
24

我很難讓e.preventDefault();正常工作。e.preventdefault();無法正常工作

這裏是我的代碼

$('#ListSnapshot a').live('click', function(e){ 
    var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; 
    $('#ListSnapshot').load(url); 
    e.preventDefault(); 
}); 

有人能解釋我做錯了,我可以看到加載功能工作,但隨後的頁面重定向到被點擊鏈接,我需要防止。

我也嘗試將e.preventDefault();移動到函數的頂部,無濟於事。

+0

我有一種感覺,這裏有其他事情發生,因爲'preventDefault' *應該*工作。我們可以看到標記/其他代碼嗎? – James 2010-07-29 12:42:49

+0

就像J-P所說的那樣,看起來還有其他事情正在發生,它應該按預期工作。你能提供#ListSnapshot的HTML和它的孩子嗎? – GenericTypeTea 2010-07-29 12:46:32

+0

我從您的問題中刪除了答案,您應該在問題再次打開時將其作爲答案發布。 – 2013-12-11 15:06:24

回答

2

嘗試返回falselive不會總是以與bind相同的方式工作。檢查jquery docs

+2

謝謝,我很害怕我嘗試過,但仍然沒有運氣。 再次感謝 Gary – Gary 2010-07-29 18:21:08

+0

我正在使用.on()並返回false爲我工作! – servermanfail 2014-07-21 11:28:23

6

您提供的代碼應該一定可行(working example)。你的代碼有另一個問題。

嘗試在您的活動處理程序中放置提醒,以確保它在所有都會觸發。您的#ListSnapshot a可能找不到任何東西。

如果處理程序中出現其他錯誤,則會導致異常,這可能會阻止JavaScript一直執行到preventDefault調用。我沒有看到你提供的代碼中可能存在什麼,tho。

+2

我認爲這可能是答案。 'try..catch'應該有所幫助。 – Josh 2010-07-29 13:19:30

+1

我編輯了這個問題,因爲我不確定如何添加回復,並且無法將它全部放在此框中。 謝謝 再次 – Gary 2010-07-29 18:19:44

+0

@加里:你做了最好的事情 - 編輯你的問題的細節,然後評論讓別人知道審查你編輯的問題是處理這個問題的適當方式。話雖如此,鑑於警報顯示,我不確定問題是什麼。這不是一個例外,因爲我懷疑:-( – Josh 2010-07-30 20:19:27

3

我認爲@David Hedlund的回答是正確的,必須發生異常。當我編寫事件處理程序時,我使用try...catch塊來確保默認操作不會發生。試試這個:

$('#ListSnapshot a').live('click', function(e){ 
    try { 
     var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; 
     $('#ListSnapshot').load(url); 
    } catch(ex) { 
     alert('An error occurred and I need to write some code to handle this!'); 
    } 
    e.preventDefault(); 
}); 

這樣一來,由於e.preventDefault();try塊外,即使發生錯誤,e.preventDefault();仍然會被調用。

8

我想你可能有以下之情況......至少,這將重現錯誤

你可能有一個事件上漲是建立在懸停事件,該事件可能是使用綁定,並即使您調用e.preventdefault,它仍會首先調用綁定,因此您可能需要使其更高一些,而不是綁定。那麼它應該按預期工作。檢查這個樣本。

http://jsfiddle.net/rodmjay/mnkq3/

$('div').bind ('click', function(){ // <-- switch this to live and you will see different behavior 

    alert('div click'); 

}); 

$('a').live('click', function(e){ 


    alert('a click'); 

    e.stopImmediatePropagation(); 


}); 
+1

這可能會發生刪除鏈接的Rails,因爲Rails會添加你可能不知道的事件 – lulalala 2013-01-28 06:13:01

3

您是否嘗試過在包裝$(文件)。就緒(...)第一事件處理程序?只是一個想法。

2

e.preventDefault()應該在處理程序中的其他代碼行之前執行。

$('#ListSnapshot a').live('click', function(e){ 
    e.preventDefault(); 
    var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable'; 
    $('#ListSnapshot').load(url); 
}); 
+0

是的,它已經修復了我在測試iPhone 6S Plus。謝謝! – mattauckland 2015-12-10 02:29:43

0

老問題,但這只是那種時刻應該看到什麼螢火蟲日誌在控制檯或返回作爲錯誤。代碼中的某些東西顯然會阻止preventDefault()防止重定向。

22

我有一個類似的問題,其中e.preventDefault()可以在某些情況下工作,但不能在其他情況下工作。它顯示沒有錯誤,並且使用try-catch未顯示catch alert。 添加e.stopImmediatePropagation()做了詭計,萬一它有助於任何人(非常感謝wcpro)

+0

謝謝你,你的解決方案就像一個魅力。再次感謝:) – Vidhi 2014-09-24 07:45:45