2011-05-17 25 views
6
$("div#foobar").live('click', function() { 

}); 

$(window).hashchange(function() { 

}); 

¿Cómo puedo dejar de disparar el evento hashchange cuando click se dispara el evento?¿Cómo detener la propagación de un evento en jquery?

Nota El evento click Estoy disparando un Ajax y cambiar el hash ... Y en hashchange estoy haciendo algo. Dado que el evento Click también cambia el hash así que hashevent dispara. Por lo tanto, quiero que cada vez que se active el evento click, el intercambio no se active.

+0

Gracias por la pregunta, no tenía idea de lo increíble que es el método live(), solo sabía sobre bind(). – Sid

+6

@SidCool: si crees que es increíble, echa un vistazo a ['delegate()'] (http://api.jquery.com/delegate/) también. Es más eficiente que 'live()'. – Town

+2

¿Qué sucede cuando se hace clic en su div? ¿En qué etapa ha cambiado el hash? Proporcionar más contexto sería de gran ayuda. – karim79

Respuesta

0
(function() { 

    var fire_hashchange = true; 

    $("div#foobar").live('click', function() { 
     fire_hashchange = false; 
     // do stuff 
    }); 

    $(window).hashchange(function() { 
     if (!fire_hashchange) { 
      fire_hashchange = true; 
      return; 
     } 
     // do stuff 
    }); 
})(); 
10

detiene la propagación y evita el comportamiento predeterminado.

$("div#foobar").live('click', function(event) { 
    event.stopPropagation(); 
    event.preventDefault() 
}); 
1

Básicamente, no puede hacer lo que quiere hacer. Si está cambiando el hash, por supuesto, se disparará el evento hashchange. Para eso está ahí. La prevención de la propagación del evento click no evitará el manejo del evento hashchange.

Diseñe su sistema para que esto no sea un problema.

Cuestiones relacionadas