2013-02-18 123 views
0

我只是想讓用戶按住shift鍵點擊某個動作的錨標籤。問題是在瀏覽器中按住Shift點擊URL會在新窗口中打開鏈接。所以,我自然會使用event.preventDefault(),但在這種情況下,它在任何瀏覽器中似乎都不起作用。任何幫助將不勝感激!Jquery event.preventDefault沒有按住shift鍵點擊

這裏是一個的jsfiddle:

http://jsfiddle.net/zZea9/

這裏是代碼:

<a href="#" class="edit">shift-click here</a> 

<script> 

$('.edit').click(function (e) { 
    if (e.shiftKey) { 
     e.preventDefault(); 
     alert('you shift-clicked'); 
    } 
}); 

<script> 

回答

1

您沒有在jsfiddle中運行jQuery。一旦這包括,你應該首先防止默認,然後檢查shift鍵並運行必要的代碼。

您應該嘗試避免stopPropogation,除非您確實打算停止冒泡DOM的事件。但在這個例子中,這看起來不像你想要的。

到這裏看看: http://jsfiddle.net/zZea9/3/

$('.edit').click(function (e) { 
    e.preventDefault(); 
    if (e.shiftKey) { 
     alert('you shift-clicked'); 
    } 
}); 

,並進一步閱讀的preventDefault: event.preventDefault() vs. return false

+0

謝謝。這確實在小提琴中奏效,所以你已經回答了我的問題。不幸的是,'stopDefault()'在我的代碼的完整上下文中仍然不起作用,所以我會在另一個問題中發佈它。再次感謝您讓我更進一步。 – MFB 2013-02-18 23:45:06

0

你不包括jQuery的讓你的點擊處理程序不會被調用。

HTML

<a href="#" class="edit">click here</a> 

JS

$('.edit').click(function(e) { 
    if (e.shiftKey) { 
     alert("shift+click") 
    } 
}); 

http://jsfiddle.net/fJHug/

+0

preventDefault仍然不起作用 – Peter 2013-02-18 22:54:52

+0

苛刻downvote,他是正確的,jQuery沒有被包含在jsfiddle中,因此點擊從未被綁定。 – 2013-02-18 23:23:27

0

下面是根據你想要的工作jQuery代碼。

$('.edit').click(function(e) { 
    if (e.shiftKey) { 
     alert("shift+click"); 
     e.preventDefault(); 
    } 
}); 

$('.edit').click(function(e) { 
    e.stopPropagation(); 
    e.preventDefault(); 
}); 
+2

你爲什麼將它分成不同的事件? – Peter 2013-02-18 22:57:50

0

既然你刪除了你的另一個問題:爲什麼沒有被阻止在您的「全默認的原因代碼「很簡單:

SCRIPT1006:Expected')'
_display,line 131 character 5

總是檢查你的控制檯是否有錯誤。他們是代碼無法工作的頭號原因。

在這種情況下,您忘記了)以關閉您的click()函數調用。