2009-11-25 11 views
9

Bu kodu vardır:Bir javascript olayı bir jQuery etkinliğinde sarılabilir miyim?

<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> 

şimdi haliyle düzenli javascript olay jQuery Olay preventDefault-işlevini desteklemediği test fonksiyonu, çalışmaz. Düzenli bir javascript olayı jQuery etkinliğinde sarmak için bir yol var mı? preventDefault?

cevap

11

bu deneyin:

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

Event object

+3

Bu, bazı yöntemlere erişmenizi sağlar, ancak "normal" bir JQuery olayı değildir ... Örneğin, şunları kullanamazsınız: $ .Event (e) . –

+1

$ .Event (e) preventDefault, stopPropagation öğesini uygular, ve stopImmediatePropagation. https://github.com/jquery/jquery/blob/master/src/event.js#L664 –

0

Olayı onclick = 'test (event)' ile geçirdiğiniz gerçeği olabileceğini düşünüyorum. Benceclick = 'test' yeterlidir. Yine de yanlış olabilirim.

+1

Sorun değil. IE'deki “event” globalini ve diğer tarayıcıdaki 'event' argümanını alır ve bunu her zamanki 'if (! E) e = window.event' IE geçici çözümünü yapmak zorunda kalmayacak şekilde işleve iletir. . – bobince

0

Evet (bkz Darin cevabını). Ayrıca (jQuery yapıyor aslında ne olduğunu) yerine preventDefault ait IE eksikliği etrafında işe yarayabilir:

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

sadece javascript yürütmek istiyorum - ve yönlendirmez - href kullanımını tıklandığında içinde "return false" tıklama işleviniz. Örneğin:

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

Eğer kullanımını yönlendirmek için bu bağlantıyı istemiyorsanız 'javascript: void (0);' href özniteliği olarak, tüm tarayıcılar hala bir bağlantı yerine bir bağlantı olarak işleyecektir (bazı IE sürümleri bunu yapar). Bir jQuery olay yerli olayı sarmak için en iyi yol buldum

5

fix ile geçerli:

event = $.event.fix(event); 

unutmayın, bu fonksiyon ortak API parçası değildir (gerçekten olması gerektiği halde) .

İlgili konular