2012-06-18 4 views
1

J'ai une application Phonegap, en utilisant jQuery et jQuery Mobile.Fonction JS déclenchée sans être appelée

Dans certaines pages, j'ai lié une fonction à un événement tap, mais la fonction est déclenchée lors du chargement de la page. Après avoir débogué un peu (en utilisant arguments.callee.caller.caller.toString()), j'ai découvert que, pour une raison folle, un événement click est déclenché dans ce bouton juste au moment du chargement de la page. Lorsque j'ai changé la classe du pied de page, le problème avait disparu (aussi mon style), puis j'ai changé les références de classe dans mon fichier CSS pour correspondre à la nouvelle classe de pied de page, le problème est revenu. C'est très étrange, peut-être qu'il a quelque chose avec mon CSS.

Il n'y a aucune autre référence à "footer_body" dans mon projet.

Si je définis les appels de fonction directement sur le HTML (quelque chose comme <span onClick="javascript:obj.leftMethod()">), j'ai le même comportement.

Bien sûr, c'est un problème de Phonegap/Android, comme cela ne se produit pas dans un navigateur PC (en plus je dois commenter beaucoup de code qui ne fonctionne que dans les mobiles).

Voici le code:

HTML:

<div class="footer_body"> 
    <span class="left"><span>Text 1</span></span> 
    <span class="right"><span>Text 2</span></span> 
</div> 

JS/jQuery:

function PageClass() { 
... 
    // called when the page is loaded 
    this.init = function() { 
     $(".footer_body", "#page_2").find(".left").unbind("tap").bind("tap", function() { 
      that.leftMethod(); 
     }); 

     $(".footer_body", "#page_2").find(".right").unbind("tap").bind("tap", function() { 
      that.rightMethod(); 
     }); 
     // that is a reference to "this" of the class 
    } 
} 
+1

Mettez 'debugger; 'première ligne dans vos fonctions' leftMethod()/rightMethod() '. Ouvrir dans Chrome et quand il se charge, appuyez sur Ctrl + Maj + I il apparaîtra un inspecteur avec un onglet Scripts en pause où vous obtenez l'ensemble stacktrace (appelant, appelé, événements, etc) –

+0

@ GRIGORE-TURBODISEL, I ' m en utilisant Phonegap. –

+0

Peu importe. Essayez-le quand même. –

Répondre

0

Question près d'être résolu. Le vrai problème est que tous les événements tactiles sont reportés sur les pages suivantes. Je n'ai pas remarqué cela avant, semblait-il quelque chose comme un clic automatique, mais était l'événement tactile de l'écran précédent qui a déclenché l'événement tactile de la page en cours.

Bien sûr, c'est un bug Android ou Phonegap - Plus d'infos à ce sujet here, dans le cas où quelqu'un aurait la même perception de ce problème. J'ai encore besoin d'une solution concrète, mais je suis fatigué d'enquêter sur ce problème, j'ai donc temporairement résolu ce paramètre un court délai pour activer les fonctions d'écoute.

Questions connexes