2010-12-07 91 views
0

Je n'arrive pas à identifier la solution à un problème avec un comportement onClick étrange sur un élément de ma page.Comportement du type de boucle sporadique avec onClick

Fondamentalement, j'ai plusieurs travées sur une page qui, quand ils ont cliqué sur, l'état de l'enregistrement change selon les besoins. Comme la mise à jour de la base de données est effectuée via Ajax, je modifie dynamiquement le gestionnaire d'événements onClick pour que l'utilisateur bascule l'enregistrement de actif à révoqué onclick change pour appeler une méthode appelée setRevoked(), active; setActive().

Un exemple du conteneur span est:

Activer

Ma méthode setActive():

function setActive(tierId) { 
     if (tierId) { 
      console.log('active' + tierId); 
      $.post("admin.php?module=clients&action=tier_activate", {'tierId':tierId,'clientId':1234> }, function(data) { 
       clearMessages(); 
       var obj = jQuery.parseJSON(data); 
       if(obj.message == 'success') { 
        var js = "setRevoke("+tierId+"); return false;"; 
        var newClick = new Function(js); 
        $('#tier_' + tierId).attr({title: 'Revoke', onClick: ''}).click(newClick).text('Revoke'); 
        addJavascriptMessage(obj.reason, "success"); 
       } 
       else if (obj.message == 'failed') { 
        addJavascriptMessage(obj.reason, "error"); 
       } 
      }); 
     } 
     else { 
      addJavascriptMessage('A valid status must be selected', "error"); 
     } 
    } 
} 

Le problème que je rencontre est pour une raison quelconque le onclick pénètre dans une boucle et plus vous appuyez sur le onclick, plus les appels à la base de données sont faits jusqu'à ce que finalement un trop grand nombre soit fait et le navigateur tombe en panne.

C'est très étrange car il n'y a pas vraiment de boucles impliquées; c'est ce qui me déconcerte.

Répondre

0

Il semble que vous dépendiez de la définition de l'attribut onClick sur '' (vide) pour essayer d'effacer les événements de clic existants. Cela ne fonctionnera pas, vous devez unbind événements jQuery précédents.

+0

Je devrais donc désengager l'événement de clic précédent avant de lier un nouveau? Cela expliquerait pourquoi il semble boucler parce qu'il y a plusieurs onClicks. –

+0

Il s'avère que je devais garder onClick = '' et avant d'ajouter $ ('# tier_' + tierId) .unbind ('click'); pour que ça marche. –

0

Quand modifiez-vous la méthode de liaison de onclick? Sur quel contrôle faites-vous la case onclick..a? Si oui, faites-vous par erreur un .checked quelque part dans la méthode qui pourrait également déclencher un onclick automatiquement?