2009-11-25 78 views
9

我有這樣的代碼:我可以在jQuery事件中包裝javascript事件嗎?

<html> 
<head> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     $(function(){ 
      $('a.one').click(function(event){ 
       event.preventDefault(); 
      }); 
     }); 
     function test(event){ 
      event.preventDefault(); 
     } 
    </script> 
    <style type="text/css"> 
     a.test { font-weight: bold; } 
     body { font-family:sans-serif; background-color:#AAAAAA;} 
    </style> 
</head> 
<body> 
    <a class="one" href="http://jquery.com/">jQuery</a> 
    <br/> 
    <a class="two" href="http://stackoverflow.com/" onclick='test(event)'>stack overflow</a> 
</body> 
</html> 

的測試功能不起作用,因爲它現在站立,因爲常規的JavaScript事件不支持jQuery的事件的preventDefault功能。有什麼方法可以在jQuery事件中封裝常規的JavaScript事件,以便我可以使用例如的preventDefault?

回答

11

試試這個:

function test(e) { 
    $.Event(e).preventDefault(); 
} 

Event object

+3

這確實可以讓你訪問一些方法,但不是一個「正常的」JQuery事件......例如,你不能使用:$ .Event(e)。其中 – 2011-04-01 16:30:33

+1

$ .Event(e)確實實現了preventDefault,stopPropagation,並stopImmediatePropagation。 https://github.com/jquery/jquery/blob/master/src/event.js#L664 – 2013-09-27 22:54:09

0

我認爲這可能是事實,你通過onclick ='test(event)'傳遞事件。我認爲onclick ='test'就足夠了。但我可能是錯的。

+1

沒關係。它在IE和其他瀏覽器的'event'參數上選取'event'全局,並將其傳遞給該函數,以便它不必執行通常的'if(!e)e = window.event' IE解決方法。 – bobince 2009-11-25 11:14:04

0

是(見Darin的答案)。你也可以解決IE缺乏的preventDefault而不是(這基本上是什麼jQuery是做):

if ('preventDefault' in event) 
    e.preventDefault(); 
else 
    e.returnValue= false; 
0

當你只是想執行JavaScript - 而不是重定向 - 在點擊HREF使用的時候「返回false」您的點擊功能。例如:

$(function(){ 
     $('a.one').click(function(event){ 
       var condition = confirm('Do you want to redirect to ...?'); 
       return condition == true; 
     }); 
}); 

如果您不希望鏈接重定向,請使用'javascript:void(0);'作爲href屬性,所有瀏覽器仍然會將其渲染爲鏈接而不是錨點(某些IE版本會這樣做)。

5

我發現在一個jQuery事件來包裝本地事件的最好辦法是fix

event = $.event.fix(event); 

請注意,這個功能是不是公共API的一部分(雖然它確實應該) 。

相關問題