2017-10-18 2 views
0

S'il vous plaît aidez-moi à comprendre pourquoi l'événement de clic est déclenché sur l'événement page prête dans mon application cordova. Dès que la page est chargée, l'événement est déclenché et si aucun pays n'est encore sélectionné, il essaie de tirer sur le courrier en cliquant sur "Aide à la connexion". Pourquoi? Dans index.htmlPourquoi un événement de clic est-il déclenché après un événement prêt pour la page?

`<div class="app-login-email-help"> 
     <a id="EmailUsLink" class="app-login-email-help-text" href="#"> 
      <span>Login Help</span> 
     </a> 
</div>` 

    $(document).on("pagecreate", function() { 

     $x.page.login.init(); 

     $("#EmailUsLink").on('click', $x.page.login.ConstructLoginHelp); 
     }); 
    }); 

Dans login.js

ConstructLoginHelp: function() { 
    var emailid = "[email protected]"; 
    var subjectLine = "Login Help"; 
    var emailBodyText = "Describe the login problem."; 
    if($("#SelectCountry option:selected").val() != "undefined"){ 
     if ($("#SelectCountry option:selected").text()){ 
      if (!_.contains(['US', 'AU', 'CA', 'IN', 'MY', 'PH', 'SG', 'GB'], $('#SelectCountry').val())) { 
       subjectLine = systemResources["LoginHelpSubjectLine".concat($("#SelectCountry option:selected").text())]; 
       emailBodyText = systemResources["LoginHelpEmailBody" + $("#SelectCountry option:selected").text()]; 
      } 
     } 
     $x.page.login.elements.emailUsLink.attr('href', 'mailto:' + emailid + '?subject=' + subjectLine + '&body=' + emailBodyText); 
    } 
    else 
     window.alert("Please Select Country"); 
} 

Il y a une liste déroulante pour laquelle je ne l'ai pas écrit le premier élément (« pays Select ») n'a pas valeur. J'utilise aussi underscore.js S'il vous plaît demander pour plus d'informations si nécessaire. L'exécution ligne par ligne montre dès que la page commence le chargement de ConstructLoginHelp et qu'elle atteint window.alert (ce qui ne devrait pas se produire lors du chargement de la page)

Maintenant, ça se passe deux fois. Et le lien lien intrestingly ne fonctionne pas.

+1

_ "pourquoi cliquez sur événement est déclencheur ed "_ - ce n'est pas le cas - votre fonction _ est appelée, car c'est ce que fait l'ajout de'() 'au nom de la fonction. – CBroe

+0

quant à la raison pour laquelle le "clic" ne déclenche pas l'alerte même si le pays n'a pas encore sélectionné, c'est parce que vous le comparez à un seul espace '" "', essayez de le changer en '" "', pas d'espace dans entre – am05mhz

+0

supprimé l'espace qui déclenche toujours l'e-mail. – Hemant

Répondre

0

Il y a un problème avec votre ligne:

$("#EmailUsLink").on('click',$x.page.login.ConstructLoginHelp()); 

En mettant entre parenthèses à la fin de votre nom de fonction, vous êtes l'exécution de votre fonction au lieu de donner comme un rappel. Enlever les parenthèses et ça devrait aller. Prenez l'habitude de reproduire le problème avec un code plus petit:  : mcve

+0

Merci, parenthèse enlevée. Mais le problème existe toujours. l'alerte est affichée avant que la page ne s'affiche et que l'alerte ne s'affiche sur aucune sélection. – Hemant

+0

Pouvez-vous nous montrer le code de '$ x.page.login.init'? Vous appelez probablement la fonction ConstructLoginHelp ailleurs. – Poney

0

Bad  :

$(document).on("ready", function() { 
 
    $("a").on("click", sayHello()); 
 
}); 
 

 
function sayHello() { 
 
    console.log("hello"); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#">Email us</a>

Bon  :

$(document).on("ready", function() { 
 
    $("a").on("click", sayHello); 
 
}); 
 

 
function sayHello() { 
 
    console.log("hello"); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="#">Email us</a>