2012-07-06 99 views
4

有沒有人有任何想法爲什麼我的preventDefault代碼不工作?返回假返回正常,但這是我的理解,這不是真的'適當'的方式?爲什麼preventDefault不起作用但返回false

if ($('.signup').length == 0) { 
     $('.star').on('click',function(e){ 
      e.preventDefault(); 
      var starElement = $(this); 
      var resourceId = starElement.parents('li').data('id'); 

      updateFavoritesSpan(starElement, starElement.hasClass('starred')); 

      starElement.toggleClass('starred'); 
      starElement.parents('li').toggleClass('fvtd'); 
     }); 
     // voting 
     $('.voting').on('click .up', function(e){ 
      e.preventDefault(); 
      sendVote($(this), 1); 
     }); 

     $('.voting').on('click', '.down', function(e){ 
      e.preventDefault(); 
      sendVote($(this), -1); 
     }); 
    } 
+0

你能在 「不工作」 詳細點嗎?那些元素是什麼?這與ajax有什麼關係? – Pointy 2012-07-06 19:55:42

+0

與所有瀏覽器或只是某些? – 2012-07-06 19:56:13

+0

它們是錨鏈接。當你點擊它們時,它會跟隨鏈接。這些是阿賈克斯請求,所以他們不應該遵循鏈接 – Tallboy 2012-07-06 19:56:27

回答

7

return false;同時做兩preventDefaultstopPropagation

preventDefault停止元素的「默認」動作,stopPropagation停止冒泡到父元素的事件。

我的猜測是父母上有一個事件,當你只做preventDefault時仍然會被觸發。

3

return falsepreventDefault()不相同。

其實return false是組合或者是速記

  • preventDefault()
  • stopPropagation()

所以嘗試添加這個問題,以及(連同e.preventDefault()):

e.stopPropagation(); 
2

有一個錯字,改變這種:

$('.voting').on('click .up', function(e){ 

到:

$('.voting').on('click', '.up', function(e){ 
+1

注意到這一點。我沒有注意到這一點。 – 2012-07-06 20:00:00

+0

@火箭感謝:) – undefined 2012-07-06 20:04:17

0

只是爲了完整性:

return false
也觸發
stopImmediatePropagation()
這將取消對同一元素的所有後續處理程序(可能會派上方便與touchend事件和意義取消隨後的點擊)

在這裏閱讀 stopPropagation()event.stopImmediatePropagation()
jquery: stopPropagation vs stopImmediatePropagation

相關問題