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?

¿Fue útil?

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; 
    });
})();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top