2009-11-25 19 views
9

tengo este código:¿Puedo envolver un evento javascript en un evento jQuery?

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

La prueba de función no funciona tal como está ahora, desde un evento JavaScript regular no admite el evento jQuery preventDefault-función. ¿Hay alguna forma de ajustar un evento regular de JavaScript en un evento jQuery para que pueda usar, por ejemplo, ¿PrevenirDefault?

Respuesta

11

Prueba esto:

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

Event object

+3

Esto le da acceso a algunos métodos, pero no es un evento JQuery "normal" ... Por ejemplo, no puede usar: $ .Event (e) .which –

+1

$ .Event (e) implementa preventDefault, stopPropagation, y stopImmediatePropagation. https://github.com/jquery/jquery/blob/master/src/event.js#L664 –

0

Creo que puede ser el hecho de que está pasando el evento con onclick = 'test (event)'. Creo que onclick = 'test' es suficiente. Sin embargo, podría estar equivocado.

+1

Está bien. Toma el 'evento' global en IE y el argumento' event' en otro navegador y lo pasa a la función para que no tenga que hacer la solución usual 'if (! E) e = window.event' IE . – bobince

0

Sí (véase la respuesta de Darin). También puede trabajar en torno a la falta de preventDefault en lugar de IE (que es esencialmente lo que jQuery está haciendo):

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

Cuando lo que desea es ejecutar el javascript - y no redirigir - al hacer clic en el uso href "return false" en su función de clic Por ejemplo:

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

Si nunca desea que el enlace redirija use 'javascript: void (0);' como atributo href, todos los navegadores seguirán presentándolo como un enlace en lugar de como un ancla (algunas versiones de IE lo hacen).

5

que he encontrado la mejor manera de terminar un evento nativo en un evento jQuery es con fix:

event = $.event.fix(event); 

Tenga en cuenta que esta función no es parte de la API pública (aunque en realidad debería ser) .

Cuestiones relacionadas