2009-11-25 19 views
9

私はこのコードを持っている:それが今立っているとして、通常のJavaScriptのイベントはjQueryのイベントのpreventDefault-機能をサポートしていないので、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?

答えて

11

はこれを試してみてください:

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

Event object

+3

これは、いくつかのメソッドへのアクセスを提供しますが、通常のJQueryイベントではありません。たとえば、$ .Event(e).whichを使用することはできません。 –

+1

$ .Event(e)はpreventDefault、stopPropagation、およびstopImmediatePropagation https://github.com/jquery/jquery/blob/master/src/event.js#L664 –

0

私はあなたがonclick = 'test(event)'でイベントを渡していることが考えられます。私はonclick = 'テスト'で十分だと思う。私は間違っている可能性があります。

+1

いいです。これは、IE上の 'event'グローバルと他のブラウザ上の' event'引数を取り出し、それを関数に渡すので、通常の 'if(!e)e = window.event' IE回避策を実行する必要はありません。 – bobince

0

はい(ダーリンの回答を参照してください)。また、(jQueryのがやっている、本質的に何をしている)の代わりのpreventDefaultのIEの不足を回避することができます:

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のバージョンによって異なります)。私はjQueryのイベントにネイティブのイベントをラップするための最良の方法を見つけた

5

fixである:

event = $.event.fix(event); 

は注意してください、この機能は、パブリックAPIの一部ではない(それは本当にする必要がありますが) 。

関連する問題