JQuery: Unbind Event que estaba vinculado con Live ()
Pregunta
Tengo una lista desordenada con cinco elementos de la lista, cada uno con un enlace dentro de él:
<ul> <li><a href="#">Link 1</a></li> <li><a href="#">Link 2</a></li> <li><a href="#">Link 3</a></li> <li><a href="#">Link 4</a></li> <li><a href="#">Link 5</a></li> </ul>
Los enlaces tienen una función de clic vinculada a ellos con live()
:
$("a").live("click", function(){ ... });
Dentro de esta función hay un get
Solicite que recupere información.
Entonces, cuando se hace clic en cualquiera de estos enlaces, quiero evitar clics en cualquiera de los otro enlaces de hacer cualquier cosa hasta el get
Esta completo. Pensé que podría hacer esto desactivando el evento de clic con die()
:
$("a").live("click", function(){ $("a").not(this).die("click"); ... });
Pero esto no funciona. No recibo ningún error, simplemente no impide el evento de clic. ¿Qué estoy haciendo mal?
Solución
El problema aquí es que estás tratando de usar live
y die
en un conjunto diferente de elementos. Para funcionar correctamente, debe aplicar live
y die
al mismo selector / conjunto de elementos.
$('a').live('click', function () { ... });
$('a').die(); // Ok!
$('a').each(function () {
$(this).die(); // Doesn't work.
});
Parece que solo desea deshabilitarlo temporalmente hasta que se complete una operación específica. Si es así, puede hacer esto con un mango / interruptor de mueca.
(function() {
var doHandle = true;
$('a').live('click', function() {
if (!doHandle) {
return;
}
// Don't handle any events until the 'get' is complete
doHandle = false;
doGet(this, function() {
// Call back for when the get is complete. Start handling again
doHandle = true;
});
})();