7
votes

JQuery Href et Onclick Séparation

J'ai un code comme celui-ci xxx

Func2 retourne vrai ou faux. Ensuite, Func1 est appelé que lorsque la fonction2 retourne true. Droite?

En apprentissage jQuery, j'ai découvert que OnClick n'est pas bon et amorcé, j'ai donc modifié ci-dessus le code à xxx xxx

MAINTENANT, ma question est la suivante:

Une fois que le gestionnaire de clic est pris en charge, que puis-je faire avec JavaScript à l'intérieur de Href? Devrais-je appeler Func1 à l'intérieur de Func2 dans JQuery Click Handler of Func2, lorsque l'état de Func2 est vrai? Ou y a-t-il une solution élégante?

aussi, la séparation du code HTML et des événements est bon, mais ici cet élément avec ID ID101 peut avoir de nombreux événements associés à celui-ci, et dans un grand Fichier, il pourrait y avoir tellement de éléments HTML avec de nombreux événements. Donc, lorsque j'ai une grande page avec de nombreux gestionnaires d'événements, alors comment puis-je savoir savoir quel élément HTML contient lequel et combien d'événements associés à celui-ci?

Plus d'explications sur la question ci-dessus comme demandé,

Je voulais dire ID101 peut avoir onclick, Onmouseover, Onmceout et de nombreux autres événements de ce type. Il peut y avoir beaucoup de tels éléments avec de nombreux gestionnaires d'événements. Comment puis-je mieux les repérer? Dans le style ancien, tous ces gestionnaires d'événements sont tous placés ensemble, comme celui-ci

Link .

Je ne dis pas que c'est bon, mais au moins je peux voir que cela a cet événement OnClick. Mais maintenant, lorsque vous séparez cela dans le fichier JQuery, je dois rechercher d'abord ce fichier jQuery pour ID101, puis vérifier les événements associés à celui-ci, ce qui peut être un problème avec le fichier HTML ayant de nombreux éléments et des gestionnaires d'événements associés. Y a-t-il un meilleur moyen de trouver cette information?


3 commentaires

Ne mettez pas de JavaScript dans le "Href" du tout. Faites cela (conditionnellement, si vous voulez) dans le gestionnaire d'événements.


@endroix: Comme dit Poiny, supprimez simplement l'attribut tout href . Inline JS est une mauvaise nouvelle. Et, lorsque vous vous battez avec le sélecteur JQuery, vous devez utiliser un «#» pour indiquer l'identifiant. À l'heure actuelle, votre jQuery ne fait probablement rien. Changez-le à $ ("# ID101"). Cliquez sur (); et supprimez-le de l'ensemble href = "x" .


@Josh, j'ai oublié ce #. Maintenant mis à jour


3 Réponses :


2
votes

Oui, je vous recommande d'écrire Func1 à l'intérieur Func2. HTML:

$("#id101").click(func2() {
   var status = false;
   //func2 goes here and modifies status value.
   if (status) {
       // func1 goes here
   } else {
       // in case if status is false.
   }

});


5 commentaires

En fait, théoriquement, il n'y a pas de limite sur les événements et les gestionnaires. Il suffit de créer des gestionnaires pour eux. Je pense que vous pourriez utiliser des cours au lieu d'identifiants. S'il y a beaucoup de liens qui devraient avoir des gestionnaires javascript, essayez de les rassembler. comme lien lien 2 aussi si vous allez Nécessité de faire des travaux spécifiques sur toutes les questions, je vous recommande d'utiliser un autre attribut qui identifiera quel lien a été cliqué. et obtenir cet attribut avec .attr ()


Et si vous ne voulez pas que votre page "sautillant" au sommet en cliquant sur ce lien (car elle fait référence à "#"), vous pouvez éventuellement utiliser quelque chose comme Link à la place. Il suffit de styler cette étendue qu'il ressemble à un lien.


@otta: Oui, j'ai lu en utilisant # dans href est mauvais. L'utilisation en span et le style est une belle solution.


@VAHAGNMKRTCHYAN Je n'ai pas compris l'importance d'utiliser mod_unique_id. Quel plus il donne que d'utiliser une pièce d'identité normale?


@ODAA, ou retour false du gestionnaire pour empêcher l'action par défaut, c'est-à-dire sautant au sommet.



2
votes

Le meilleur que je puisse vous dire est que c'est un code "malodorant" - vous ne voulez pas que votre javascript soit tout ce que vous êtes comme celui-ci. Je vous recommanderais de passer quelques heures de plus en plus d'apprentissage des fondamentaux de JQuery et de passer à partir de là. Je sais que cela peut être frustrant, surtout si vous travaillez avec legacy JavaScript.


0 commentaires

10
votes

Si je comprends correctement, vous voulez éviter le JavaScript en ligne, mais vous souhaitez également pouvoir regarder à un A code> et savoir s'il a un événement lié à celui-ci. Malheureusement, il n'y a pas de moyen acceptable de noter cela, comme l'inline JavaScript est une mauvaise nouvelle. Peut-être que vous pouvez simplement donner à votre élément une classe factice pour aider votre future lisibilité. Autre que cela, oubliez tout le Func1 code> et Func2 code> chose. Utilisez simplement une fonction anonyme à l'intérieur de votre reliure de clic.

<a id="some_id" class="optional_has_click">Click Me</a>

<script type="text/javascript">
  $(document).ready(function(){

    $("#some_id").click(function(){

      // do something
      alert( $(this).attr("id") );

    });

  });
</script>


2 commentaires

Oui, je veux éviter les JS en ligne mais également voir les événements associés à A . Et si je dois utiliser ce Func1 et Func2 dans de nombreux endroits, puis-je faire cela avec une fonction anonyme?


@endroix: Appelez simplement la fonction à l'intérieur de l'Anonymous, où je suis alerte en ce moment.