2011-04-15 72 views
0

在以下代碼中,e.preventdefault();無法正常工作,瀏覽器無論如何都會訪問錨點href。我可以看到第一個警報,但在此之後,瀏覽器會跟隨錨點的href鏈接。我已經閱讀了Stackoverflow上的這個(類似的)問題,但它並沒有真正幫助我:e.preventdefault(); not workinge.preventDefault未執行

關於我在做什麼錯的任何想法或我如何解決它?提前致謝。

$('body').delegate('a.newslink', 'click', function(e) { 
    alert('start'); 
    e.preventDefault(); 
    $.get($(this).attr('href'), function(data) { 
     alert(data); 
     $('.reader').replaceWith(data); 
     $('#article-menu').removeClass('open'); 
     $('#article-menu').addClass('closed'); 
     $('#newslist').animate({height:'0px'}, 200); 
    }); 
}); 
+1

您是否嘗試刪除警報?警報不適合調試。 – Khez 2011-04-15 13:12:10

+1

你試過用e.stopPropagation()嗎? – Karthik 2011-04-15 13:12:18

+0

你確定它被綁定,因爲你認爲?當我試圖做一個快速jsfiddle preventDefault正常工作。 – justkt 2011-04-15 13:16:04

回答

2

嘗試使preventDefault調用成爲您的第一件事。警報可能會阻礙。

此外,因爲這是一個委託事件,您可能還需要調用e.stopPropagation。

最後,在這種情況下,我不是100%確定的,但事件可能不會被取消(檢查e.cancelable的值)。請參閱https://developer.mozilla.org/en/DOM/event.preventDefault

+0

奇怪的返回false;也沒有執行。 gareth是正確的,因爲它也使用stopPropagation我不得不在函數的末尾使用return false。 – 2011-04-15 13:46:05

+0

ALRIGHT GUYS持有你的馬!稍後在腳本中會對同一個類有更多的JavaScript操作。我很抱歉浪費你的時間!我已經度假了,剛回來,我們與兩位開發人員一起工作,所以我想這樣的事情可能會發生。我不想廣泛檢查它。另一方面,你的答案讓我走上了正確的軌道(@justktk @Chris Shouts)。再次抱歉和謝謝 – 2011-04-15 13:55:39